实体框架:ObjectSet 及其(泛型)方差

2024-05-24

我使用: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(使用前将#替换为@)

实体框架:ObjectSet 及其(泛型)方差 的相关文章

随机推荐