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 点看到它,那就)?

穆乔斯丹克!

AutoMapper 的 AssertConfigurationIsValid 仅在首次加载时失败

最后,这是由 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有关。 虽然我仍然不知道为什么映射在第二次传递时"有效"!?这太奇怪了!