2012-04-19 69 views
2

在X/WebSiteMVC3 /核心/ DependencyResolution/XProfile.cs,我有一個現有的映射,看起來有點像這樣:AutoMapper的AssertConfigurationIsValid僅在首次加載時失敗?

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(目的地成員列表)

Thing1

堆棧跟蹤:

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

但在每其他後續加載,它按預期工作!?

那麼......爲什麼Thing2失敗,當它的實現匹配Thing1(它一直工作)?爲什麼Thing1在Thing2的錯誤中被提及(我有一種感覺,這是原因,但是如果我能在這個空閒的星期四上午10點看到它,我會感到厭煩)?

Muchos Danke!

+0

你打電話給你的automapper配置?從Application.Start在global.asax.cs中? – Simon 2012-04-19 08:19:52

+0

是的,「Core.DependencyResolution.AutomapperRegistry.Configure();」從global.asax.cs中的Application_Start被調用。由於這是我的第一個MVC應用程序,所以我在這個問題上遇到了一些損失,而且寫這個應用程序的開發人員正在度假,所以我是一個縱隊(誰也不想改變這要歸功於我的無知以及其他任何事情)。 – Campbeln 2012-04-22 23:50:30

回答

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上!通常當發生這種情況時,我設法做了一些非常奇怪的事情,因此我很快觸發了在這裏提出問題。在這種情況下,問題有些微不足道。

因此......對於可能通過Google來到這裏的其他人:這可能與您的模型本身有關,而不是使用AutoMapper的一些奇怪之處。儘管我仍然不知道爲什麼這些映射在第二遍「工作」!這太奇怪了!

+0

我得到同樣的錯誤..我敢肯定,這是我的新鮮感..至少這是一個開始..謝謝! – hanzolo 2013-02-04 22:13:16