私が使用するもの:EntityFramework + POCO
これがそのことです:
public interface IBaseType
{
int Id { get; set; }
}
public class BaseType : IBaseType
{
public virtual int Id { get; set; }
}
public class DerivedType : BaseType
{
}
問題:
public class EntityFetcher<T> where T : BaseType
{
public object GetById(int id)
{
ObjectSet<T> objectSet = (ObjectSet<T>)GetTheObjectSet(typeof(T));
return objectSet.SingleOrDefault((o) => o.Id == id);
}
}
これT
はBaseType
すべて完全に機能しますが、問題は、EntityFrameworkで、あるクラスが別のクラスを継承するObjectSet
と、を共有するため、がそうである場合T
はDerivedType
、にキャストできない戻り値をGetTheObjectSet
返すことです。ObjectSet<BaseType>
ObjectSet<DerivedType>
これを実際にキャストする方法はありますか、それとも他の方法で実行する方法はありSingleOrDefault
ますか?IObjectSet<>
とを使用してそれらをキャストできますIBaseType
か?