问题标签 [automapper-5]

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 投票
1 回答
305 浏览

automapper - AutoMapper 5.x 不再支持 ResolutionContext 中的 MemberName

在以前版本的 AutoMapper 中,我创建了一个通用 PreCondition 来有条件地映射/不映射某些成员。我通过将成员名称数组添加到 Map 选项并根据当前正在映射的成员检查此列表来实现这一点,如下面的代码所示。

不幸的是,MemberName 不再在 ResolutionContext 中公开,所以我不知道当前正在映射哪个成员。我在新精简的 ResolutionContext 中找不到任何可以引导我获取此信息的内容。

我知道我可以编写很多特定的前提条件案例,但我将其用于数以万计的类型。有谁知道获取当前 MemberName 的其他方法?

0 投票
1 回答
2922 浏览

c# - 迁移到 AutoMapper 5 - 循环引用

System.StackOverflowException在尝试在 AutoMapper 5 中映射以前与 AutoMapper 4 一起使用的东西时遇到了问题。

在谷歌搜索了一下后,我发现它是由循环引用引起的。

AutoMapper 文档说:

以前,AutoMapper 可以通过跟踪映射的内容来处理循环引用,并且在每个映射上,检查源/目标对象的本地哈希表以查看项目是否已被映射。事实证明,这种跟踪非常昂贵,您需要选择使用 PreserveReferences 才能使圆形地图工作。或者,您可以配置 MaxDepth:

所以我添加.MaxDepth(3)到我的代码中,它现在又可以工作了。

但是我不明白真正的问题是什么以及我通过添加该行做了什么:)

我的问题:

  • 关于 Category/CategoryDto 的“循环引用”是什么意思?
  • 究竟是做什么的.MaxDepth()?为什么在示例中使用 3?
  • .PreserveReferences()为了什么?
0 投票
1 回答
179 浏览

c# - Automapper 5.0.2 中缺少类型映射配置或不支持的映射

我在我的 OData API 中使用 AutoMapper。我发现了许多具有相同标题的问题并尝试了所有解决方案,但我的问题没有得到解决。我正在使用最新的 AutoMapper 版本 5.0.2。请让我知道我哪里出错了。

这是我的代码:

启动.cs

AutoMapperWebConfiguration.cs

合同类型控制器.cs

谢谢你

0 投票
1 回答
5489 浏览

c# - Automapper 表达式错误:空引用/错误映射类型和 ReverseMap

我正在尝试使用 AutoMapper 在表达式中的两个模型之间进行映射,但收到来自 AutoMapper 的错误:“错误映射类型”,内部异常消息为“对象引用未设置为对象的实例”。

我按照 Github 上的 wiki 设置了配置并定义了映射:

配置

表达翻译

下面是一个非常简化的示例,它使用 AutoMapper 5.1.1 版本产生错误。

要映射的模型

注意:我只需要从 Model1 映射到 Model2。

配置:

用法:

我在上面声明 model2Expr 变量的行收到错误。

来自 Elmah 的错误 :(

重要提示:一位同事指出,当定义双向映射(使用 ReverseMap 或两个单独的 CreateMap 语句)时,或者将映射明确定义为介于表达式类型之间时,不会遇到错误。上面的表达式翻译链接确实定义了模型之间的两种方式映射,但没有明确提到需要它。

问题:

我是否以某种方式弄乱了配置和/或映射定义,或者在表达式中的对象之间进行映射时需要两种映射定义,而 wiki 只是没有明确说明它?


更新:我在AutoMapper GitHub 上 打开了一个问题。目前看来

是的,在进行表达式翻译时,顺序是倒退的。

基本上这意味着如果您想在表达式之间进行映射,请在所需映射的相反方向创建映射定义:

0 投票
1 回答
588 浏览

automapper-5 - Automapper 5 不映射使用只读属性定义的集合

当我升级到 Automapper 5.1.1 时,使用只读属性定义的集合的映射停止工作(使用 Automapper 4.2.1 可以正常工作)

这是一个示例代码,您可以尝试使用两个版本的 Automapper 来验证行为更改。使用 automapper 5.1.1 result.MyList 有零个元素。

如何使用 Automapper 5.1.1 使地图正常工作?

0 投票
1 回答
430 浏览

c# - 使用嵌套类型从类型到类型的 AutoMapper 映射

我正在使用带有实例 API 的最新版本。

我的来源类型:

我的目的地类型:

我的配置(在配置文件中完成):

但这并没有映射内部对象。当我测试配置时,它会抛出一个无用的AutoMapperConfigurationException异常。

使这种映射工作的正确方法是什么?

0 投票
0 回答
266 浏览

c# - Automapper 5.2.0 和带有 EF6 的投影抛出异常 - 错误?

使用 Automapper 3.3.1 或 4.2.1 时,我的代码运行良好。

但是在升级到 5.2.0 后,我在 AutoMapper.QueryableExtensions.ExpressionBuilder.DestinationConstructorExpression 中得到 ArgumentException:“类型‘System.String’没有默认构造函数”。

我们有一个支持多种语言的遗留数据库,在我们的 EF6 模型中,我们使用 LocalizedString 复杂类型来保存每个字符串属性的所有翻译值。基于这篇文章

示例代码:

LocalizedString 的自定义映射是

从 4.2.0 迁移到 5.2.0 的唯一变化是将 CreateCustomMappingForLocalizedString 中的参数类型从 IMapperConfiguration 更改为 IMapperConfigurationExpression。

我在这里使用 Automapper 5.2.0 做错了什么还是 Automapper 中的错误?

我在我的 GitHub存储库中放置了一个包含 3.3.1、4.2.1 和 5.2.0 版本的单独项目的小型示例解决方案。

0 投票
2 回答
1041 浏览

c# - Automapper 源前缀属性

我们正在设计一个实体的定义可以改变的时间系统。我正在尝试设置 Automapper,但无法完全确定前缀应该如何工作。

例如,我将拥有以下实体:

使用以下 DTO:

我知道我可以使用

但我觉得我必须做一些更聪明的事情?我试过添加 RecognizePrefixes("Current") 但这没有效果。

0 投票
1 回答
1074 浏览

c# - AutoMapper 5.2.0 VIewModel 到 Core MVC 中的模型问题

楷模:

查看型号:

映射:

控制器更新操作:

问题是,当_clientRepository.Update(client)被调用时,我收到一条错误消息:

无法跟踪实体类型“客户端”的实例,因为已在跟踪具有相同键的此类型的另一个实例。添加新实体时,对于大多数键类型,如果没有设置键(即,如果键属性被分配了其类型的默认值),将创建一个唯一的临时键值。如果您为新实体显式设置键值,请确保它们不会与现有实体或为其他新实体生成的临时值发生冲突。附加现有实体时,请确保只有一个具有给定键值的实体实例附加到上下文。

当我调试代码时,我可以看到,当我将 viewModel 映射到模型时,客户端模型中的 AddressID 设置为 0。我猜这是导致问题的原因。

如何将 viewModel 映射回将更新地址详细信息的模型,例如 Address1 和 Postcode 而不是 Id。

我还尝试在映射中忽略 Id for Address 的映射.ForMember(x => x.AddressId, opt => opt.Ignore())

但它仍然将 AddressId 设置为 0。

我错过了什么?

0 投票
1 回答
1002 浏览

asp.net-core - 设置 Automapper 5.1

在这种情况下,我在关注 wiki 时遇到了麻烦。我想使用 Automapper 5.2。我找不到一个简单的端到端示例来显示带有上下文的可靠配置。通过上下文我的意思是你把配置文件放在哪里,静态和实例 api 之间有什么区别?

我查看了 DNRTV 下载,但它处理的是 1.0 版本。

你如何设置这个包?我有一个名为 Client 的模型,如下所示。

和一个 ClientViewModel 如下:

我不确定如何在配置方面设置 AutoMapper。也就是说,他们谈论的是 global.asax 文件,而我正在使用 aspnet core.. 没有 Global.asax 文件..

如果有的话,你在 Startup.cs 文件中放了什么。

鉴于上面的这两个文件,我需要做什么才能将 Automapper 与它们一起使用?

问候