Entity Framework: ObjectSet и его (обобщенные) отклонения
Я использую: 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
?