我开始了一项新工作,我们正在将一个相当大的 VB.NET 2.0 应用程序(带有数据集)迁移到 C# 4.5(带有 EF4。)
在我们的业务层,我们的“搜索”函数现在返回 EDMX 中定义的类的 IEnumerables。所以这样的事情很简单:
public IEnumerable<Product> GetProductsByCategory(int categoryId)
但是,当我们的 EF4“Select()”方法生成更复杂的自定义(匿名)类型时,情况会更加复杂:没有生成的类对应于结果。
因为这个函数必须跨越层边界(业务到 UI),所以我认为适当的解决方案是为此查询定义一个自定义类型,然后返回该类型的 IEnumerable;例如
public IEnumerable<ProductAccountSummary> GetProductAccountSummariesByCategory(int categoryId)
哪里ProductAccountSummary
是手工制作的 DTO(即 POCO)。
然而,在代码审查期间,团队负责人未能通过我的方法;他要求我删除 DTO 并将方法签名更改为:
public IEnumerable GetProductAccountSummariesByCategory(int categoryId)
....原因是我们仍然可以将 IEnumerable 绑定到我们的 UI 网格等,而无需每次需要使用自定义类型时手工制作 DTO 的开销。
所以我的问题是:
- 在 EF4 中,跨层边界传递自定义类型集合的典型方法是什么?返回一个 IEnumerable (隐含地,“对象”)对我来说似乎不正确。我错过了什么吗?