ASP.Net分层应用程序 - 在层之间共享实体数据模型

时间:2010-05-17 15:26:25

标签: asp.net entity-framework data-access-layer ado.net-entity-data-model

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

否则答案是你做不到的。如果实体依赖于实体框架,那么您不能在整个应用程序中使用它们而不拖动该依赖项。在这种情况下,您必须使用DTO。这是没有POCO实体的EF 1或EF 2的第三方选项。 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

答案 1 :(得分:2)

您可以从数据实体创建DTOs并将您的DTO传递到rpesentation图层。