AutoMapper的AssertConfigurationIsValid仅在第一次加载时失败?

时间:2012-04-19 00:13:51

标签: c# asp.net-mvc-3 automapper

在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 - &gt; Thing2(目的地会员名单)

     

X.X.WebSiteMVC3.Models.Thing2 - &gt; X.X.DomainObjects.Entities.Thing2(目标成员列表)

     

Thing1

堆栈跟踪:

  

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

但在每个其他后续加载中,它按预期工作!?

那么......为什么Thing2失败了,当它的实现与Thing1(它一直有效)的实现相匹配时?为什么在Thing2的错误中提到了Thing1(我感觉这是原因,但如果我能在周四的这个空闲时间在上午10点看到它的话,我会感到很沮丧)?

Muchos Danke!

1 个答案:

答案 0 :(得分: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有些奇怪。虽然我仍然不知道为什么映射在第二次通过时“有效”!那太奇怪了!