1

Automapper でこの奇妙な動作に遭遇したことはありません。まず、Automapper 3.3.0 と Entity Framework 6.1.3 を使用しています。エンティティ フレームワークを介してエンティティ データを取得するメソッドがあります。データを返す前に、それをドメイン モデルにマッピングしています。3 つのプロパティを除いて、関連するプロパティの名前はエンティティとドメインの間で一致するため、提供するサンプル コードで、マップの作成時に ForMember 呼び出しが 3 つだけあることがわかります。

私が期待するように、これはほとんどの場合うまくいきます。ただし、ときどき、再現するための正確な手順を突き止めることはできませんが、明示的にマップされた 3 つのプロパティを除いて、マッピングは成功します。

適切だと私が信じているコードは次のとおりです。

var dailyPriceHistories = 
  MapToDomain(_clearDbEntities.get_DailyPriceHistory(startDate.Date, endDate.Date).ToList());

参考までに、ToList 呼び出しは、EF からの遅延読み込みの問題を防ぐことを目的としています。

そして、マッパー:

private static IList<DailyPriceHistory> MapToDomain(List<get_DailyPriceHistory_Result> someDataEntities)
{
    Mapper.CreateMap<get_DailyPriceHistory_Result, DailyPriceHistory>()
        .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.DailyPriceHistory_ID))
        .ForMember(dest => dest.ProductId, opt => opt.MapFrom(src => src.AllProducts_ID))
        .ForMember(dest => dest.DateInfoId, opt => opt.MapFrom(src => src.DateInfo_ID));

    return Mapper.Map<List<get_DailyPriceHistory_Result>, List<DailyPriceHistory>>(dailyPriceHistoryEntities);
}

iisreset を実行すると、すべて問題なく動作します。Visual Studio 2013 でデバッグ モードを少し行ったり来たりしたときに発生するようです。これらのプロパティをマップする方法を忘れているようです。渡されるエンティティ データには常に値が含まれていますが、そのうちの 3 つをドメインにマップすることはできません。

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1