2012-04-19 17 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

のStackTrace:

AutoMapper.ConfigurationStore.AssertConfigurationIsValid(IEnumerable`1タイプマップ)684 AutoMapper.ConfigurationStore.AssertConfigurationIsValid()Cで+12 AutoMapper.Mapper.AssertConfigurationIsValid()+23 XXWebSiteMVC3.Core.DependencyResolution.AutomapperRegistry.Configure(): \ソース\ XXWebSiteMVC3 \ Global.asax.cs:C 13 XXWebSiteMVC3.MvcApplication.Application_Start():\ソース\ XXWebSiteMVC3 \コア\ DependencyResolution \ AutomapperRegistry.cs 96

しかし、すべてオン他の後続のロード、それは意図したとおりに動作します!

だから... Thing2の実装がThing1の実装と一致すると、なぜThing2が失敗するのですか(常に動作します)?そしてなぜThing1がThing2のエラーで言及されているのですか(私はこれが原因だと感じていますが、このアイドルの木曜日の午前10時にそれを見ることができれば駄目です)?

Muchos Danke!最後に

+0

どのようにオートマッパーの設定を呼び出していますか? Application_Start from global.asax.cs? – Simon

+0

はい、 "Core.DependencyResolution.AutomapperRegistry.Configure();" global.asax.cs内のApplication_Startから呼び出されています。私は、これが最初のMVCアプリケーションであり、それを書いた開発者が休暇中であるという事実のために、この問題の損失を経験していたので、私はストリンガーだ(誰も変更したくない私の無知のおかげでコードベースのほうがずっと多くなりました)。 – Campbeln

答えて

4

、これは私はこれをしなければならなかった...バックThing1にThing2上の相互参照によって引き起こされていた...

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に奇妙なことではなく、あなたのモデル自体と関係している可能性が高いです。私はまだマッピングが2回目のパスで「うまくいった」ことを知らないのですが?それはちょうど奇妙です!

+0

私は同じエラーが発生している..私はそれが私の新しさだと確信しています..少なくともこれはスタートです..ありがとう! – hanzolo

関連する問題