将DTO映射到实体

时间:2017-02-07 12:42:56

标签: c# entity-framework dto

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

此外,我无法找到任何新发现的消息来源,有一个问题抱怨没有" new"消息来源已有4年历史。

我找到的其中一个来源,看起来很有希望就是这个 https://rogerjohansson.blog/2013/12/01/why-mapping-dtos-to-entities-using-automapper-and-entityframework-is-horrible/

我也无法让它发挥作用。

所以,基本情况就是这样。

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

我有一个订单dto,相关的dto是订单行,客户,客户地址或者deradress。稍后会有更多内容。

因为这些主要是数据库表,所以主要是" table"是订单。它充当标题,订单和其他自我解释。我确定每个人之前都遇到过这样的事情。

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

我告诉你做的是;

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

b)将实体添加到dbcontext和savechanges。

那么,有人能指出我在解决这种情况方面的良好方向吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

总结一下:AutoMapper为您节省了大量时间,您可以投资定制一些配置。如果没有,你将不得不使用linq投影,这在大多数情况下将花费你更多的时间。例如:通过检测基于Ids的添加/编辑/删除来解决集合问题,也可以通过自定义映射器使用AutoMapper进行处理。

相关问题