【问题标题】:How to Merge Two Objects into One, Using AutoMapper version 10如何将两个对象合并为一个,使用 AutoMapper 版本 10
【发布时间】:2021-11-14 12:24:48
【问题描述】:

我遇到过这些问题:Merge two objects using AutoMapperC# Merge objects with automapper, 这似乎是最有帮助的:Automapper - Multi object source and one destination,但它似乎没有使用 AutoMapper 代码的第 10 版。使用最新版本的 AutoMapper,一切都有其自身的错误。

此外,我刚刚开始使用 StackOverflow,所以我还不能对这个问题发表评论。我只能问我自己的。

在 AutoMapper 中,您现在必须使用称为“配置文件”的东西(请参阅此处的文档:https://docs.automapper.org/en/stable/Dependency-injection.html#asp-net-core)。因此,我的问题是,如何在 .Net 5 或更高版本的 AutoMapper 版本 10 中创建“合并”类型的映射(因此使用依赖注入等)

作为一个请求,如果你给出特定的代码sn-ps,你能否给出代码应该去的where,例如“In Startup.cs”或“Create a new class”,等等

由于 AutoMapper 对我来说太新了,所以一些图书馆术语对我来说仍然是新的。

感谢大家的帮助。


2021 年 9 月 21 日美国东部时间上午 11 点更新 关于为什么我要合并的一些上下文: 这是我为强调要点而概括的场景:

我有 2 个数据源。我通过 API 联系的一个。另一个是通过 MsSql。

API 存储人员信息(姓名、地址),而 Sql 存储 ProgramPerson(上面的 PersonId、程序的许可证号、DateOfLicense 等)

因此,我想从 API 获取信息,然后从 Sql Server 获取信息,最后得到一个 C# 模型。这样,当我需要更新 Person 时,我可以传递 1 个实现 Sql 和 Api 调用接口的模型。

【问题讨论】:

  • 人的模型不应该知道或关心数据来自哪里的任何事情。只需获取数据,并在您的人员对象上设置适当的字段。 AutoMapper 似乎有点矫枉过正,正如 Piotr 在他们的回答中所说,不推荐用于此用例。
  • 他@Peter K。感谢您的反馈。所以我想要这个的原因是我们仍在积极开发中,并且有可能我们必须更改共享 API 或 Sql 端的字段。我的目标是让 AutoMapper 在每次都避免反射的同时动态创建地图。此外,帮助确保在可能的情况下映射每个字段并且不被忽略。我认为 AutoMapper 总是会在模型发生更改时识别映射序列,而不是在一个模型或另一个模型发生更改后检查数据服务或更多。
  • 听起来很危险,一切都在不断变化。我认为你最好让人工审查映射的所有更改,而不是依赖 AutoMapper 的“魔力”。 YMMV
  • 很公平。我们正在组织内创建一个共享 api,共享接口和模型库(通过版本化的 Nuget 包)。但是,我非常感谢您的意见和反馈。这个问题的历史版本很受欢迎,所以我没想到这是一件危险的事情。再次感谢。

标签: c# merge automapper .net-5


【解决方案1】:

我认为使用 Automapper 合并两个对象并不是一个好主意。我认为它最适合简单的情况。图书馆作者的一些建议:https://jimmybogard.com/automapper-usage-guidelines/

“X 不要使用 AutoMapper,除非目标类型是源类型属性的扁平子集”

【讨论】:

  • 感谢您的回复。所以这是我概括的强调要点的场景。我有 2 个数据源。我通过 API 联系的一个。另一种是通过Sql。 API 存储人员信息(姓名、地址),而 Sql 存储 ProgramPerson(上面的 PersonId、程序的许可证号、DateOfLicense 等)因此,我想从 API 获取信息,然后从 Sql Server 获取信息和最终得到一个 C# 模型。这样,当我需要更新时,我可以传递 1 个实现 Sql 和 Api 调用接口的模型。
  • 因此,从某种意义上说,我要合并的两件事都有一个接口(IModel1 和 IModel2),MERGED 模型将实现该接口(ExampleClass:IModel1,IModel2)。模型 1 将提供属性 1-5,模型 2 将提供属性 6-10。
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2020-05-16
  • 2017-04-24
  • 2017-01-17
相关资源
最近更新 更多