问题标签 [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.
automapper - AutoMapper 5.x 不再支持 ResolutionContext 中的 MemberName
在以前版本的 AutoMapper 中,我创建了一个通用 PreCondition 来有条件地映射/不映射某些成员。我通过将成员名称数组添加到 Map 选项并根据当前正在映射的成员检查此列表来实现这一点,如下面的代码所示。
不幸的是,MemberName 不再在 ResolutionContext 中公开,所以我不知道当前正在映射哪个成员。我在新精简的 ResolutionContext 中找不到任何可以引导我获取此信息的内容。
我知道我可以编写很多特定的前提条件案例,但我将其用于数以万计的类型。有谁知道获取当前 MemberName 的其他方法?
c# - 迁移到 AutoMapper 5 - 循环引用
我System.StackOverflowException
在尝试在 AutoMapper 5 中映射以前与 AutoMapper 4 一起使用的东西时遇到了问题。
在谷歌搜索了一下后,我发现它是由循环引用引起的。
AutoMapper 文档说:
以前,AutoMapper 可以通过跟踪映射的内容来处理循环引用,并且在每个映射上,检查源/目标对象的本地哈希表以查看项目是否已被映射。事实证明,这种跟踪非常昂贵,您需要选择使用 PreserveReferences 才能使圆形地图工作。或者,您可以配置 MaxDepth:
所以我添加.MaxDepth(3)
到我的代码中,它现在又可以工作了。
但是我不明白真正的问题是什么以及我通过添加该行做了什么:)
我的问题:
- 关于 Category/CategoryDto 的“循环引用”是什么意思?
- 究竟是做什么的
.MaxDepth()
?为什么在示例中使用 3? - 是
.PreserveReferences()
为了什么?
c# - Automapper 5.0.2 中缺少类型映射配置或不支持的映射
我在我的 OData API 中使用 AutoMapper。我发现了许多具有相同标题的问题并尝试了所有解决方案,但我的问题没有得到解决。我正在使用最新的 AutoMapper 版本 5.0.2。请让我知道我哪里出错了。
这是我的代码:
启动.cs
AutoMapperWebConfiguration.cs
合同类型控制器.cs
谢谢你
c# - Automapper 表达式错误:空引用/错误映射类型和 ReverseMap
我正在尝试使用 AutoMapper 在表达式中的两个模型之间进行映射,但收到来自 AutoMapper 的错误:“错误映射类型”,内部异常消息为“对象引用未设置为对象的实例”。
我按照 Github 上的 wiki 设置了配置并定义了映射:
下面是一个非常简化的示例,它使用 AutoMapper 5.1.1 版本产生错误。
要映射的模型
注意:我只需要从 Model1 映射到 Model2。
配置:
用法:
我在上面声明 model2Expr 变量的行收到错误。
来自 Elmah 的错误 :(
重要提示:一位同事指出,当定义双向映射(使用 ReverseMap 或两个单独的 CreateMap 语句)时,或者将映射明确定义为介于表达式类型之间时,不会遇到错误。上面的表达式翻译链接确实定义了模型之间的两种方式映射,但没有明确提到需要它。
问题:
我是否以某种方式弄乱了配置和/或映射定义,或者在表达式中的对象之间进行映射时需要两种映射定义,而 wiki 只是没有明确说明它?
更新:我在AutoMapper GitHub 上 打开了一个问题。目前看来
是的,在进行表达式翻译时,顺序是倒退的。
基本上这意味着如果您想在表达式之间进行映射,请在所需映射的相反方向创建映射定义:
automapper-5 - Automapper 5 不映射使用只读属性定义的集合
当我升级到 Automapper 5.1.1 时,使用只读属性定义的集合的映射停止工作(使用 Automapper 4.2.1 可以正常工作)
这是一个示例代码,您可以尝试使用两个版本的 Automapper 来验证行为更改。使用 automapper 5.1.1 result.MyList 有零个元素。
如何使用 Automapper 5.1.1 使地图正常工作?
c# - 使用嵌套类型从类型到类型的 AutoMapper 映射
我正在使用带有实例 API 的最新版本。
我的来源类型:
我的目的地类型:
我的配置(在配置文件中完成):
但这并没有映射内部对象。当我测试配置时,它会抛出一个无用的AutoMapperConfigurationException
异常。
使这种映射工作的正确方法是什么?
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 版本的单独项目的小型示例解决方案。
c# - Automapper 源前缀属性
我们正在设计一个实体的定义可以改变的时间系统。我正在尝试设置 Automapper,但无法完全确定前缀应该如何工作。
例如,我将拥有以下实体:
使用以下 DTO:
我知道我可以使用
但我觉得我必须做一些更聪明的事情?我试过添加 RecognizePrefixes("Current") 但这没有效果。
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。
我错过了什么?
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 与它们一起使用?
问候