3

如何在我的 C# Web 应用程序的所有层之间共享自动生成的实体数据模型(生成的对象类),同时只授予数据层中的查询访问权限?这使用了典型的 3 层方法:数据、业务、表示。

我的数据层将一个返回IEnumerable<T>到我的业务层,但我不能将类型 T 返回到表示层,因为我不希望表示层知道数据层的存在 - 这是实体框架自动生成我的类的地方。

建议使用仅包含数据模型的单独层,但我不确定如何将数据模型与实体框架提供的查询功能分开。

4

2 回答 2

5

如果您使用POCO 实体(.NET 4+),那么这很容易(或者至少更容易)。有这种可能吗?

您可以像 Ben 所说的那样创建 DTO,但是您基本上是在简化和复制每个实体。如果您愿意,EF2 将创建“简化”实体并动态添加更改跟踪、延迟加载等。

否则答案是你不能。如果实体依赖于实体框架,那么您不能在整个应用程序中使用它们而不拖动该依赖项。在这种情况下,您必须使用 DTO。这是没有 POCO 实体的 EF 1 或 EF 2 的第 3 方选项。 http://automapper.codeplex.com/

编辑:这里有一些有用的链接可以了解更多关于这一切的信息:

  1. 一般 MS 指南:http: //msdn.microsoft.com/en-us/library/bb738470.aspx
  2. POCO 模板:http: //blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx
  3. POCO 模板,包括如何移动到单独的项目:http: //blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-poco-templates-for-the-entity-framework.aspx
  4. POCO 代理:http: //blogs.msdn.com/adonet/archive/2009/12/22/poco-proxies-part-1.aspx
  5. 如何拆分模型:http: //blogs.msdn.com/adonet/archive/2008/11/25/working-with-large-models-in-entity-framework-part-2.aspx
  6. Employee Tracker 示例应用程序(层、单元测试、模拟、存储库等): http ://code.msdn.microsoft.com/ef4/Release/ProjectReleases.aspx?ReleaseId=4279
于 2010-05-17T15:30:20.000 回答
2

您可以从您的数据实体创建DTO并将您的 DTO 传递给表示层。

于 2010-05-17T15:29:25.027 回答