我以前从未在 Automapper 遇到过这种奇怪的行为。首先,我使用 Automapper 3.3.0 和 Entity Framework 6.1.3。我有一个通过实体框架检索实体数据的方法。在返回数据之前,它会将其映射到域模型。除了三 (3) 个属性之外,相关属性的名称在实体和域之间匹配,因此您将在我提供的示例代码中看到,在创建地图时只有三 (3) 个 ForMember 调用。
正如我所期望的那样,这在大多数情况下都可以正常工作。但是,偶尔,我无法确定重现的确切步骤,映射成功,但三 (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 中使用调试模式来回切换时,似乎会发生这种情况。就像它只是忘记了如何映射这些属性。传入的实体数据确实总是包含值,顺便说一句,它根本无法将它们三个映射到域。
任何帮助将不胜感激。谢谢!