AutoMapper 的 AssertConfigurationIsValid 仅在首次加载时失败
本文关键字:加载 失败 AssertConfigurationIsValid AutoMapper | 更新日期: 2023-09-27 18:31:47
在X/WebSiteMVC3/Core/DependencyResolution/XProfile.cs中,我有一个现有的映射,看起来有点像这样:
CreateMap<DomainObjects.Entities.Thing1, Models.Thing1>();
CreateMap<Models.Thing1, DomainObjects.Entities.Thing1>()
.ForMember(a => a.Thing2, opt => opt.Ignore())
.ForMember(a => a.ModifiedBy, opt => opt.Ignore())
.ForMember(a => a.ModifiedDate, opt => opt.Ignore())
.ForMember(a => a.CreatedBy, opt => opt.Ignore())
.ForMember(a => a.CreatedDate, opt => opt.Ignore());
我需要为其子对象添加映射,所以我输入了以下内容:
CreateMap<DomainObjects.Entities.Thing2, Models.Thing2>();
CreateMap<Models.Thing2, DomainObjects.Entities.Thing2>()
.ForMember(a => a.ModifiedBy, opt => opt.Ignore())
.ForMember(a => a.ModifiedDate, opt => opt.Ignore())
.ForMember(a => a.CreatedBy, opt => opt.Ignore())
.ForMember(a => a.CreatedDate, opt => opt.Ignore());
它可以工作,除了在第一页加载时,我得到这个:
找到未映射的成员。查看下面的类型和成员。 添加自定义映射表达式、忽略、添加自定义解析程序或修改源/目标类型
事物 2 -> 事物 2(目标成员列表)
X.X.网站MVC3.Models.Thing2 -> X.X.DomainObjects.Entities.Thing2 (目标成员列表)
事情1
堆栈跟踪:
AutoMapper.ConfigurationStore.AssertConfigurationIsValid(IEnumerable'1 typeMaps) +684 AutoMapper.ConfigurationStore.AssertConfigurationIsValid() +12 AutoMapper.Mapper.AssertConfigurationIsValid() +23 X.X.WebSiteMVC3.Core.DependencyResolution.AutomapperRegistry.Configure() in C:''Source''X.X.WebSiteMVC3''Core''DependencyResolution''AutomapperRegistry.cs:13 X.X.WebSiteMVC3.MvcApplication.Application_Start() in C:''Source''X.X.WebSiteMVC3''Global.asax.cs:96
但是在所有其他后续加载中,它都按预期工作!?
那么......为什么Thing2失败了,当它的实现与Thing1的实现相匹配(它一直有效)时?为什么在 Thing2 的错误中提到了 Thing1(我有一种感觉这是原因,但如果我能在这个空闲的星期四上午 10 点看到它,那就)?
穆乔斯丹克!
最后,这是由 Thing2 上的交叉引用回到 Thing1 引起的......所以我不得不这样做...
CreateMap<DomainObjects.Entities.Thing2, Models.Thing2>();
CreateMap<Models.Thing2, DomainObjects.Entities.Thing2>()
!-> .ForMember(a => a.Thing1, opt => opt.Ignore())
.ForMember(a => a.ModifiedBy, opt => opt.Ignore())
.ForMember(a => a.ModifiedDate, opt => opt.Ignore())
.ForMember(a => a.CreatedBy, opt => opt.Ignore())
.ForMember(a => a.CreatedDate, opt => opt.Ignore());
真正让我感到奇怪的是,我收到的错误消息("找到未映射的成员......")没有出现在谷歌上!?通常,当这种情况发生时,我已经设法做了一些非常奇怪/奇怪的事情,因此我在这里快速触发了一个问题。在这种情况下,问题有些微不足道。
所以... 对于可能通过Google到达这里的其他人:这可能与您的模型本身有关,而不是与AutoMapper有关。 虽然我仍然不知道为什么映射在第二次传递时"有效"!?这太奇怪了!