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()in C:\ Source \ XXWebSiteMVC3 Core \ DependencyResolution \ AutomapperRegistry.cs:13 C:\ Source \ XXWebSiteMVC3 \ Global.asax.cs:96のXXWebSiteMVC3.MvcApplication.Application_Start()

しかし、その後のすべてのロードでは、意図したとおりに機能します!?

では、Thing2の実装がThing1の実装と一致するのに(常に機能する)、なぜThing2が失敗するのでしょうか。そして、なぜThing1がThing2のエラーで言及されているのですか(これが原因だと感じていますが、このアイドル状態の木曜日の午前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の奇妙なことではなく、あなたのモデル自体に関係しているでしょう。マッピングが2回目のパスで「機能した」理由はまだわかりませんが!?それは奇妙なことです!

于 2012-04-22T23:45:57.133 に答える