【发布时间】:2011-12-21 12:24:15
【问题描述】:
如果我想在检索 EF 实体的数据时只选择几列并将它们转换为 Entity 类型,我不能这样做,因为它会引发本文中提到的错误 The entity cannot be constructed in a LINQ to Entities query。我不想选择所有列,因为我只需要其中的几个。我可以使用匿名类型,但是如果我使用存储库模式并且想要将所有数据访问代码封装在存储库对象中并将强类型对象集合传递给控制器(不是匿名对象集合),我该如何实现呢?是为 EF 实体的每个属性子集定义 DTO 对象的唯一选择吗?我知道部分加载的实体存在丢失数据的风险,但如果我准备承担风险并希望完全控制数据更新,这不可能吗?
例如,我希望“ProductRepository”方法签名是这样的
public IEnumerable<Product> GetProducts(int categoryID) //selection of subset of data
并且我想将此产品集合从控制器传递到视图(在 ASP.NET MVC 项目中),并且在视图中我希望拥有强类型模型(带有智能感知)对象。这可能吗?如果没有,由于这个限制,我可能不得不重新考虑在我的项目中使用 EF。我使用的是 EF 4.1 版本。
【问题讨论】:
标签: asp.net-mvc-3 entity-framework entity-framework-4.1 repository-pattern