【问题标题】:Map Entity Framework Entities to POCOs and Maintain Hierarchy将实体框架实体映射到 POCO 并维护层次结构
【发布时间】:2012-05-23 03:21:23
【问题描述】:

我刚开始从事一个使用实体框架的项目。以前,应用程序传递 EF 实体,并且它们已完全填充,因此每个代码部分都能够访问具有属性的属性中的属性...

我刚刚创建了域实体,我想将 EF 实体映射到这些域实体。它基本上是一个 1-1 映射。这应该怎么做?有一个 T4 模板可以将 EF 实体映射到 POCO,但它只映射一层深度。如果我想访问 Person -> Car -> Engine 怎么办?我应该如何从 EF 结构转到 POCO 结构并在整个层次结构中进行映射?

【问题讨论】:

  • 如果是一对一映射,那么我认为最好也为实体框架创建 POCO 实体,您不需要为域创建单独的实体。
  • 如何为 EF 创建 POCO 实体?
  • 您可以先使用 POCO stackoverflow.com/questions/2478081/… 或实体框架工作代码

标签: c# entity-framework mapping


【解决方案1】:

您应该使用 AutoMapper 或 ValueInjector 之类的东西。如果您的课程遵循某些约定,那么它工作得很好。如果他们不这样做,您可以定义自定义映射类来为您完成。

【讨论】:

  • 谢谢。我试图避免学习第 3 方工具。根据 daryal 的回答,我也许可以只使用 POCO。
  • @BobHorn - 即使您使用的是 POCO,在表示层中使用它们通常也是个坏主意。数据和域层,当然。但根据您的 UI(MVC、WPF、Silverlight 等),最好使用需要映射到业务层的视图模型。
【解决方案2】:

在我看来,您不需要创建另一组域实体。 POCO 实体旨在用于所有层(恕我直言)。

但是,如果您想将另一组实体映射到 POCO 实体,只需使用 Automapper。 它具有映射对象及其属性的能力。

另一方面,使用 POCO 可以访问 Person -> Car -> Engine 链。把“include”做好,就没有问题了。

【讨论】:

  • 我一定是使用了错误的术语。对我来说,POCO == 域实体。我不想将另一组 POCO 映射到域实体,因为它们是同一回事。我只是不想公开数据类(使用 EF)。所以,我认为我只需要两种类型的类:EF 生成的类,以及我可以传递给所有项目的类。是吗?
  • 事实上没有;你只需要 POCO 课程;您在 EF、域层以及服务或表示层中使用 POCO 类(在某些情况下,您可以在服务和客户端之间交换 DTO,但这是题外话)。如果使用的是 POCO 类,则不需要生成 EF 类;如果我理解正确,您提到的是 EDMX 文件背后的代码;您根本不需要这些生成的代码。只需在您需要的任何地方使用 POCO。我希望它很清楚。
  • 好的,所以实际上只有一组实体,它们是 POCO,对吧?如果是这样,那么这些应该存在于我的数据项目之外,以便它们可以被多个项目使用。现在我需要看看如何生成这些......也许是来自 Asif 的链接,上面。
  • 只需在单独的库中创建您的 POCO 实体并重用它们。这里有详细解释blogs.msdn.com/b/adonet/archive/2010/01/25/…
  • 谢谢。此应用程序中已存在 T4 模板。但问题是它只映射了一层深度。我不确定如何在不遇到无限循环的情况下一直映射。让我看看这些链接,看看它们是否有帮助。
猜你喜欢
  • 1970-01-01
  • 2011-05-06
  • 2011-08-29
  • 2017-10-17
  • 2014-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
相关资源
最近更新 更多