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

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

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

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

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

最佳答案

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

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

否则答案是你不能。如果实体依赖于 Entity Framework,那么如果不拖拽该依赖项,就无法在整个应用程序中使用它们。在这种情况下,您必须使用 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. 员工跟踪器示例应用程序 (层,单元测试,模拟, 存储库等): http://code.msdn.microsoft.com/ef4/Release/ProjectReleases.aspx?ReleaseId=4279

关于ASP.Net 分层应用程序 - 在层之间共享实体数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2850371/

相关文章:

c# - 使用 Entity Framework 将数据保存在一个事务中的多个表中

c# - 在 NHibernate 中制作数据访问方法的最佳方法是什么?

c# - Json.Net 可以处理 List<object> 吗?

asp.net - 如何在App_Code之外编译C#文件?

c# - 如何在忽略 DateTime 属性的时间部分的同时选择具有 Linq by Date 的项目?

asp.net-mvc - Entity Framework - 选择特定列并返回强类型而不丢失强制转换

terminology - 数据访问层的目的是什么?

php - 一个人修改的小网站,PHP序列化存储数据好吗

c# - ASP.NET Web 服务模板不存在?

asp.net - 什么导致 "The type library importer could not convert the signature for the member"警告?