Jef*_*fim 4 .net entity-framework casting covariance objectset
我使用:EntityFramework + POCO
这是事情:
public interface IBaseType
{
int Id { get; set; }
}
public class BaseType : IBaseType
{
public virtual int Id { get; set; }
}
public class DerivedType : BaseType
{
}
Run Code Online (Sandbox Code Playgroud)
问题:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果T是BaseType这一切完美的作品,但是:问题是,在当的EntityFramework一个类继承了另一个他们分享的ObjectSet,因此,如果T是DerivedType则GetTheObjectSet返回ObjectSet<BaseType>,不能被强制转换为ObjectSet<DerivedType>.
有没有办法实际抛出这个东西或以其他方式执行SingleOrDefault?那些东西可以使用IObjectSet<>和IBaseType?
我想你正在寻找这个:
public T GetById(int id)
{
ObjectSet<T> objectSet = (ObjectSet<T>)GetTheObjectSet(typeof(T));
return objectSet.OfType<T>().SingleOrDefault((o) => o.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
ObjectQuery的OfType方法(ObjectSet派生自的方法)将返回派生类型的对象.