繁体   English   中英

将DTO映射到实体

[英]Mapping DTO to Entity

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

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

我找到的其中一个看起来非常有前途的来源是https://rogerjohansson.blog/2013/12/01/why-mapping-dtos-to-entities-using-automapper-and-entityframework-is-horrible/

我也无法让它发挥作用。

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

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

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

由于这些主要是数据库表,因此主“表”是Order。 它充当标题,订单和其他自我解释。 我相信每个人之前都会遇到这样的事情。

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

我被告知要做的是;

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM