实体框架上下文是否可以返回继承实体的类

时间:2013-10-18 11:51:00

标签: c# entity-framework ef-code-first

我有一个Entity Framework 5 Code First DbContext

public class ProductContext : DbContext
{
    public DbSet<Product> Products {get;set;}
}

public class Product
{
    public int ProductId { get; set; }
    public string Name { get; set; }
}

现在我必须实现一个接口,但不想污染我的模型,所以我创建了一个

public class ProductEx : Product, ISomeInterface
{
    public bool ISomeInterface.SomeMethod() { return false; }
}

我知道我能做到:

var query = from p in context.Products
            select new ProductEx { p.ProductId, p.Name };

但是由于DbContext已经返回动态代理(因为更改跟踪/延迟加载),可能有更好的方法。我在考虑这样的事情:

var query = from p in context.Products.As<ProductEx>()
            select p;

实体应该是从ProductEx继承的动态代理。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

一种方法是你可以为产品创建一个包装器:

public class Product
{
    public virtual int ProductId { get; set; }
    public virtual string Name { get; set; }
}

public class ProductEx : Product, ISomeInterface
{
    private readonly Product _product;

    public ProductEx(Product product) {
        this._product = product;
    }

    public bool ISomeInterface.SomeMethod() { return false; }

    public override int ProductId
    { 
        get { return this._product.ProductId; }
        set { this._product.ProductId = value; }
    }

    public override string Name
    { 
        get { return this._product.Name; }
        set { this._product.Name = value; }
    }
}

然后你可以查询liko:

var query = from p in context.Products
        select new ProductEx(p);