在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(目标成员列表)
  
  X.X.WebSiteMVC3.Models.Thing2-> X.X.DomainObjects.Entities.Thing2(目标成员列表)
  
  东西1


堆栈跟踪:


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


但是在随后的所有其他负载上,它都能按预期工作!

那么...当Thing2的实现与Thing1的实现匹配(始终有效)时,为什么会失败?为什么在Thing2的错误中提到Thing1(我觉得这是原因,但是很奇怪,如果我能在这个空闲的星期四上午10点看到它)?

Muchos Danke!

最佳答案

最后,这是由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上!?通常,发生这种情况时,我确实做了一些奇怪/奇怪的事情,因此我很快就在这里提出了一个问题。在这种情况下,这个问题有些微不足道。

所以...对于可能通过Google到达这里的其他人:这可能与您的模型本身有关,而不是与AutoMapper有关。尽管我仍然不知道为什么映射在第二遍“有效”!那太奇怪了!

关于c# - AutoMapper的AssertConfigurationIsValid仅在首次加载时失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10219935/

10-13 06:28