【发布时间】:2012-10-24 07:35:36
【问题描述】:
我开始了一项新工作,我们正在将一个相当大的 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 (隐含地,“对象”)对我来说似乎不正确。我错过了什么吗?
【问题讨论】:
-
好问题。我总是在应用层之间使用 DTO。不知道为什么有人会选择非通用
IEnumerable。 -
没有评论的“-1”?残酷的!必须是我的团队负责人:)
标签: c# entity-framework-4 anonymous-types business-logic-layer ef-database-first