问题标签 [automapper-6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1016 浏览

c# - AutoMapper 覆盖递归类型

我有一个看起来像这样的 Dto:

现在我需要从两个不同的来源映射到它。那是因为其中一个包含Name,另一个包含DisplayName。所以类型:

Children注意/Nested可枚举中的名称差异。

现在对于地图我会做:

第一张地图按预期工作,递归地映射孩子,填充IdandName字段并在任何地方留下DisplayNameequal null。然而,第二个映射DisplayName正确地填充了根对象,但随后在其子对象中,它使该Name字段无效。例如:

映射以下实例后,结果的字段设置为:

所以孩子的Name无效,这不是我想要的。我希望它是"child",显然。我应该如何配置映射器以获得想要的行为?

我无法更改Type1orType2类,它们来自外部 API。

AutoMapper 的版本是 6.2.1,.NET Framework 4.5.1。

0 投票
0 回答
177 浏览

c# - 在 AutoMapper 中映射嵌套不同类型具有不同属性名称的嵌套对象

我正在尝试将一个嵌套对象映射到另一个,如下例所示。我可以轻松地将 BobAge 映射到 JimAge 等。但是如何将 Bobs Collection 映射到 Jims 集合。这可以深入 n 级。非常感谢

0 投票
1 回答
1903 浏览

linq - Automapper ProjectTo 不允许将属性映射到自定义方法

我正在使用实体框架 6.2.0 和 Automapper 6.2.2。我需要将实体映射CartCartDto. CartDto有一个属性Total需要映射到Cart.GetTotal(). 我想用它.ProjectTo来简化查询,但如果我这样做,我会收到错误:

LINQ to Entities does not recognize the method GetTotal()

因为投影使用IQueryable和方法在SQL中没有翻译。有没有办法解决这个问题?

0 投票
0 回答
97 浏览

c# - Automapper 常用地图部分

即我有以下地图类:

那么我应该在其他地方使用它,即:

怎么做?

添加:

我试图在创建映射器对象期间解决它:

但我想将它封装在 AutoMapperLocation 中,因为没有 AutoMapperAddress 就没有 AutoMapperLocation

0 投票
0 回答
22 浏览

asp.net-mvc - Automapper 仅将子对象重新映射到现有的扁平化 VM

我有一个父域对象和子域对象被映射到单个 ViewModel 对象。例如

类型映射在静态配置文件中,它只是使用内置的命名约定来映射属性并实现扁平化。

我将它ParentChildVM与一个 ASP.NET MVC 视图一起使用,该视图在表单输入中放置ID和,但仅显示和. 由于的属性不在表单字段中,因此它们不会在保存时回传到服务器,并且在从发布的值重建的 中是空的。Name ChildIDChildNameChildParentChildVM

所以我想将Child域对象重新映射到 myParentChildVM以填充缺失的属性。但我不想Parent再次映射,因为它会覆盖编辑的值。有没有办法使用 AutoMapper (v6.1.1.0)将给定的Child实例映射到我现有的实例中?ParentChildVM

编辑:

我想我知道我可以从Child->添加一个映射ParentChildVM,然后.ForMember用来告诉它如何映射ChildIDand ChildName,但实际上还有更多属性,所以我要问的是:有没有办法做到这一点并且仍然需要基于命名约定的映射的优势?IE 继续使用 AutoMapper 的“自动”部分。

0 投票
0 回答
504 浏览

c# - AutoMapper 6.2.2 在映射具有循环引用的对象时抛出 StackOverflowException(尽管相应的属性为 NULL)

我们结合使用 EntityFramework 6.2.0 和 Automapper 6.2.2 在实体和 DTO 之间进行映射。不幸的是,对于其中一些映射,System.StackOverflowException 一次又一次地发生。经过广泛的研究,我们已经尝试了几件事来解决这个问题:

  • 设置 MaxDepth(全局)
  • 设置 PreserveReferences(全局)
  • 启用/禁用 CreateMissingTypeMaps(全局)
  • 试图理解执行计划

到目前为止,还没有解决问题。各种文章都描述了在 DTO 中应避免循环引用,不幸的是,我们并非如此。

循环引用示例:

但是,如果根本没有设置这些假定的循环引用属性,即为 NULL,也会出现问题。但是,如果您从类中完全删除这些属性,则不会再发生错误。

除了循环引用之外还有其他可能的原因吗?由于错误的配置也会发生此错误吗?在大多数情况下,我们使用这样的映射:

AssertConfigurationIsValid 方法充满了关于“找到未映射的成员”的警告。

我们问自己的主要问题是我们是否忽略了配置,错误配置了它,或者我们是否真的需要从 DTO 中删除所有循环引用。

作为相关的附注:我们使用 SimpleInjector 作为 DI 容器,我们使用它来将 MappingConfiguration 绑定在一个中心位置,并将其注入到依赖于 IMapper 的所需位置。

0 投票
1 回答
485 浏览

c# - Automapper - IQueryable 扩展和内存中的条件映射

我的 .NET 项目中有 EntityA 到 DtoA 类和 automapper 的 2 种用法。

第一个是:

第二个:

我希望有一个可重用的映射适用于这两种情况。对于基于 param1 值的某些字段,此映射必须是有条件的。如何在单个CreateMap<,>().ForMember() API 中实现它?

0 投票
0 回答
152 浏览

c# - 如何在针对具有自定义属性的所有源成员进行映射期间调用扩展方法?

我正在使用 AutoMapper v6.1.1 将我的富域模型实体映射到一些扁平化的 DTO。

我在一个返回 的静态类中初始化配置IMapper,它添加了我们的映射配置文件并PreserveReferences()为我们所有的地图进行配置。

我已经针对我的源实体成员的子集声明了一个自定义属性(仅适用于 type 的成员string)。

我想向 AutoMapper 添加一个全局配置,允许我在映射期间针对具有该属性的任何成员调用扩展方法。

这些成员中的每一个最终都会有许多不同的目标类型,所以我认为这将是一种简单的方法,可以确保始终为这些成员运行扩展方法,而无需为每个新地图显式配置它。

下面是一个人为的例子。

来源实体:

目标实体:

扩展方法:

如果我的源实例是用这些值定义的:

我希望以下陈述是正确的:

我已经完全陷入困境(并且在文档中有些挣扎),但我认为我得到的最接近的是:

任何帮助将不胜感激,即使告诉我这是一个糟糕的想法或不可能。

0 投票
1 回答
1449 浏览

c# - AutoMapper 不会自动复制同名的 Id 列

AutoMapper 7.0.1

发现了一个我无法解释的有趣问题。将视图模型映射回 DB 实体对象时,Id 属性未映射且始终为 0,除非我在CreateMap定义中明确设置其 MapFrom。

在数据库中,该TimeDetail.Id列是一个自动增量列,但我不知道 automapper 是如何知道这一点的……但这是我能想到的唯一原因。另外,这是用于更新现有 TimeDetail 的实例。

显示 Id 的调试器填充在 viewModel 中: 在此处输入图像描述

调试器显示从 Id = 0 的自动映射器映射的实体对象: 在此处输入图像描述

地图表达:

数据库表类对象:

查看型号:

地图:

IgnoreAllVirtual 扩展方法:

0 投票
1 回答
824 浏览

c# - 当源为空时如何防止 AutoMapper 初始化目标 JObject 成员

假设您有以下类:

然后你使用这个配置 AutoMapper:

当您将一个Source对象映射为一个Data导致 null json 的值(例如,一个 null 值、一个空字符串或字符串“null”,所有这些都会导致 JsonConvert 返回 null),最终的值Destination.Data被设置为空 JObject 而不是 null。

有没有办法阻止 Automapper 初始化目标成员?

您可以做一些不同的事情,但其中大多数只涵盖部分案例。例如,您可以向映射添加条件以仅在Source.Data不为空或不为空时应用。Source.Data但如果是字符串“null”,这将不起作用。

有没有更好的方法来处理这个而不需要在外面添加一堆特殊的套管条件?

旁注:我可以通过提供字符串和 JObject 之间的顶级映射来使其工作。但这意味着我必须对每种情况使用相同的逻辑,并且我只希望它适用于这个属性。