2

在 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());

它可以工作,除了在第一页加载时,我得到了这个:

未映射的成员被发现。查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义解析器或修改源/目标类型

Thing2 -> Thing2(目标成员列表)

XXWebSiteMVC3.Models.Thing2 -> XXDomainObjects.Entities.Thing2(目标成员列表)

东西1

堆栈跟踪:

AutoMapper.ConfigurationStore.AssertConfigurationIsValid(IEnumerable`1 typeMaps) +684 AutoMapper.ConfigurationStore.AssertConfigurationIsValid() +12 AutoMapper.Mapper.AssertConfigurationIsValid() +23 XXWebSiteMVC3.Core.DependencyResolution.AutomapperRegistry.Configure() 在 C:\Source\XXWebSiteMVC3\ Core\DependencyResolution\AutomapperRegistry.cs:13 XXWebSiteMVC3.MvcApplication.Application_Start() 在 C:\Source\XXWebSiteMVC3\Global.asax.cs:96

但是在随后的所有其他加载中,它都按预期工作!?

那么......为什么 Thing2 失败了,当它的实现与 Thing1 匹配时(它一直都在工作)?为什么在 Thing2 的错误中提到了 Thing1(我觉得这是原因,但如果我能在这个空闲的星期四上午 10 点看到它,那该死的)?

穆乔斯·丹克!

4

1 回答 1

4

最后,这是由 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 的一些奇怪之处。虽然我仍然不知道为什么映射在第二次通过时“起作用”!?这太奇怪了!

于 2012-04-22T23:45:57.133 回答