【问题标题】:Mapping DTO to Entity将 DTO 映射到实体
【发布时间】:2017-02-07 12:42:55
【问题描述】:

我正在尝试将 DTO 映射到实体。当我在网上搜索它时,我注意到很多对 AutoMapper 的引用以及关于它如何不是一个好方法的反馈。

我也找不到任何新日期的来源,一个抱怨没有“新”来源的问题是 4 岁。

我发现的一个看起来很有希望的来源是 https://rogerjohansson.blog/2013/12/01/why-mapping-dtos-to-entities-using-automapper-and-entityframework-is-horrible/

我也无法让它工作。

所以,基本上情况是这样的。

我正在尝试使用 wcf 对订单进行集成。 (另一个案例)

我有一个订单 dto,相关的 dto 是 orderline、customer、customeraddress、orderadress。稍后会有更多内容。

由于这些本质上是数据库表,因此主要的“表”是 Order。它充当标题,订单线和其他是不言自明的。相信大家以前都遇到过这样的事情。

我根据他们的对应实体创建了 Dto。

我被告知要做的是;

a) 将这些 DTO 转换(或者按照术语,映射?)这些 DTO 到实体

b) 将实体添加到 dbcontext 并保存更改。

那么,任何人都可以为我指出解决这种情况的好方向吗?

【问题讨论】:

    标签: c# entity-framework dto


    【解决方案1】:

    我们有一个与您类似的项目。我们使用 MVC 中的 Model 类代替 WCF,但最终的想法是相同的:从一个对象转换为另一个对象。我不能不同意 AutoMapper。起初,我们对它的效率也有同样的怀疑,但最后我们决定试一试。然后,我们遇到了文章指出的一些问题(尤其是元素的集合)。幸运的是,AutoMapper 为您提供了足够的灵活性来处理那些特殊的映射条件。

    • 对于集合,我们使用自定义映射,这使我们能够检测何时有新元素/要更新的元素/要删除的元素
    • 对于引用,我们遵循 Entity Framework 的规则:添加 FK_Id 值而不是真实对象。
    • 如果出于某种原因,您需要在映射上添加一些逻辑,基于一些引用实体,那么我们使用dependencyResolver(仅在极端情况下,因为我们不喜欢dependencyResolver 的想法)

    我认为 AutoMapper 很容易学习基础知识,因此您可以在几分钟内映射您的对象。此外,它还为您提供了特殊考虑的所有工具。

    您发布的文章解释了“实体框架不喜欢 AutoMapper”的原因,但它更多地涉及您如何遵循 EF 和 AutoMapper 的规则。实体框架是一个巨大的 ORM,因此,您需要遵循一些规则(在某些情况下非常严格的规则)。当然,使用 AutoMapper 和基本的例子会打破一些规则,但是一旦你开始习惯它,就真的很容易遵守规则。

    总结一下:AutoMapper 为您节省了大量时间,您可以投资自定义一些配置。如果没有,您将不得不使用 linq 投影,这在大多数情况下会花费您更多时间。例如:收集问题通过根据Ids检测add/edit/delete来解决,也可以通过自定义mapper用AutoMapper处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-13
      • 2021-12-31
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      相关资源
      最近更新 更多