问题标签 [automapper-4]
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.
c# - How to register AutoMapper 4 with Simple Injector 3
I have an Azure web job that parses CSV containing categories and maps the result into regular objects.
I'm trying to replicate AutoMapper + Simple Injector configuration from one project in another by memory but getting an error:
AutoMapper.AutoMapperMappingException : Missing type map configuration or unsupported mapping.
Mapping types:
CsvCategory -> Category
WebJobs.Data.CsvCategory -> Data.Category
Destination path: Category
Source value: WebJobs.Data.CsvCategory
I can fix it by replacing the whole container configuration with this line:
but instead I'd like to learn where is the problem, where I'm doing this wrong.
c# - 请求子类时如何阻止Automapper映射到父类
我正在努力在我们的服务中实现 AutoMapper,并且在我们的单元测试中看到了一个非常令人困惑的问题。
首先,这个问题涉及以下对象及其各自的地图:
它还涉及这些对象,尽管此时我还没有使用 AutoMapper 映射这些对象:
这些类使用包含以下内容的自定义代码进行转换,其中source
是 DbParty:
我遇到问题的测试创建了一个新的 DbParty,2 个新的 DbAccounts 链接到新的 DbParty,2 个新的 DbPartyAccountRoles 都链接到新的 DbParty,每个 DbAccounts 各有 1 个。然后它通过 DbParty 存储库测试一些更新功能。如果需要,我可以为此包含一些代码,它只需要一些时间来清理。
当它自己运行时,这个测试工作得很好,但是当在与另一个测试相同的会话中运行时(我将在下面详细说明),上述转换代码中的 Mapper 调用会抛出这个异常:
另一个测试还创建了一个新的 DbParty,但只有一个 DbAccount,然后创建了 3 个 DbPartyAccountRoles。我能够将这个测试缩小到打破另一个测试的确切行,它是:
注释掉这一行允许其他测试通过。
有了这些信息,我的猜测是测试正在中断,因为调用 AutoMapper 时与 DbAccount 对象后面的 CastleProxy 有关,但我对如何操作一无所知。
我现在已经设法运行相关的功能测试(对服务本身进行调用)并且它们似乎工作正常,这让我认为单元测试设置可能是一个因素,最值得注意的是有问题的测试是针对内存数据库中的 SqlLite。
c# - 新版本的 Automapper 在定义子类型映射时抛出强制转换异常
假设我有一个源类和两个目标类,一个更通用,一个更具体(继承自更通用的一个):
对于 Automapper 3.*,此代码运行良好:
但是,升级到 4.0.4 后,此映射会引发异常:
我做错了什么还是AutoMapper中的错误?
.net fiddle 中的代码:
- 3.3.1版本:https ://dotnetfiddle.net/6K9PtK
- 4.0.4版本:https ://dotnetfiddle.net/0mF8y8
c# - 使用 AutoMapper 合并对象
我正在尝试使用 AutoMapper 合并来自多个对象的数据,并且遇到了一些我似乎无法解决的问题。
我有一个像这样的对象:
显然子属性并不都是整数,但它们中的大多数都是可以为空的。
我在我的应用程序的两个不同层中有这些对象,所以我使用 AutoMapper 在它们之间进行转换:
转换效果很好,我对它的作用很满意。但是,现在我需要合并多个相同类型的对象。我将拥有一个对象的一个副本,其中填充了大部分或所有属性,另一个副本只有少数属性,其余为空。我希望将第二个(部分)对象的任何非空属性映射到第一个(已填写)对象中的相应字段。正如对此答案的公认答案所述,我也应该能够使用 AutoMapper 来执行此操作,但它没有给出任何明确的示例。
但是,当我去执行操作时,我得到一个与其中任何一个对象相同的对象,而不是像我想要的那样组合。
我期望 Child 的值是 10、20、100、40 和 50。但是,根据我是否将合并作为 Mapper.Map 中的源或目标,我得到 null、null、100、null、null 或 10、20 , 30, 40, 50。
有没有办法获得我的预期值?我认为列表是导致问题的原因,因为它不知道如何排列实体(以确定它们是否相同)。如果回答任何问题,我将能够通过查看一个或多个属性是否相同(在此示例中为 Key)来确定子记录是否相同。
c# - 将平面 JSON/字典映射到模型(包含子类)
我想把一个扁平的json字符串变成一个模型,目标类有子类,扁平的json有所有带前缀的子类对象;像“{classname}.{property}”。
这是我的目标课程:
我尝试了以下方法:
我知道 Automapper 有 RecognizePrefix 和 RecognizeDestinationPrefix,但 AutoMapper 似乎只关心它是否在原始对象中,而不是子类。
可能我可以将我的 JSON 字符串设为字典,但即便如此我也不知道如何将它映射到带有子类的模型。
希望我可以拥有无限数量的子类,并且 JSON 字符串可以将平面 JSON 模型映射到模型。
c# - 具有相同类型的嵌套 Dto 的 Dto 失败
我在一个项目中遇到了一个问题,并在一个裸测试项目中成功地重现了它。
我有以下 dto:
对应的模型是完全一样的,只是有模型关系而不是 DTO(很明显)。
自动映射器配置:
最简单的查询:
这总是抛出一个NotSupportedException
:
这当然是自动映射器的问题。
现在我尝试了以下方法:
这使得查询context.Issues.ProjectTo<IssueDto>()...
成功。但这反过来会直接映射AppUser
结果为空值(或 0 表示 Id)。所以context.Users.ProjectTo<AppUserDto>().FirstOrDefault()
(甚至Mapper.Map<AppUserDto>(context.Users.FirstOrDefault())
)总是返回一个AppUserDto
带有默认值的 props。
那么,如何在不牺牲对所述 dto 对象的直接映射的情况下使同一基本 dto 中的多个嵌套 dto 对象在同一个基础 dto 中工作?
使用 ProjectUsing 解决问题(如果我们可以同时进行直接映射)并不理想,但如果这是我能做到的唯一方法。
编辑:
很可能有一个错误,这是任何感兴趣的人的 github 问题。
c# - 未在嵌套集合中映射的 Automapper 无法正常工作
全部。例如我们有这样简单的类
我们有一些配置代码
和测试数据初始化
我希望看到
是否可以像最初一样将内部集合的 Id 设置为等于 5?
c# - 带有 IDataReader 到 List 的 AutoMapper 始终返回 0 个计数
我AutoMapper
在我的应用程序中使用最新版本的。我想将DataTable
对象转换为List
类型,我正在使用以下代码阅读器的类型DataTable
但它总是返回 0 计数,我的DataTable
列名也与AutoShiftReportConfigDto
' 的属性类型和名称相同
automapper - 使用 WebApiRequestLifestyle 的 Automapper 和 SimpleInjector
我将 Automapper(来自 Nuget 的最新版本)插入我的项目(WebApi2,框架 4.5.1)并使用 SimpleInjector(来自 Nuget 的最新版本)。
我的问题是在使用 Automapper 之前一切正常。现在我不确定为什么它告诉我缺少反向映射(当我知道调用的服务不需要它时)。
我正在使用 IMappingEngine 接口。
我有一个包含所有 Mapper.CreateMap 的 AutoMapperConfig 类
AutoMapperConfig 示例
AutoMapperConfig.Configure 接收 IMappingEngine 的原因是某些映射属性内部有其他映射。例如(代码片段):( 注意 Mapper.CreateMap 中的 Mapper.Map)
在Global.asax(方法 Application_Start())中,我正在调用:
在我使用的 SimpleInjector注册中:
然后每个Controller接收一个 IMappingEngine 并使用:
有什么遗漏或错误吗?
提前致谢!吉列尔莫。