我使用: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);
}
}
If T
is BaseType
这一切都很完美,但是:
问题是,在 EntityFramework 中,当一个类继承另一个类时,它们共享ObjectSet
因此,如果T
is DerivedType
那么GetTheObjectSet
回报ObjectSet<BaseType>
,不能转换为ObjectSet<DerivedType>
.
有没有办法实际投射这个东西或者以其他方式执行SingleOrDefault
?那些东西可以用IObjectSet<>
and IBaseType
?
我想你正在寻找这个:
public T GetById(int id)
{
ObjectSet<T> objectSet = (ObjectSet<T>)GetTheObjectSet(typeof(T));
return objectSet.OfType<T>().SingleOrDefault((o) => o.Id == id);
}
The ObjectQuery 的 OfType 方法 http://msdn.microsoft.com/en-us/library/bb301729.aspx(ObjectSet 派生自)将返回派生类型的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)