Automapper有时无法映射通过ember设置的属性

本文关键字:ember 设置 属性 映射 Automapper | 更新日期: 2023-09-27 18:07:08

我以前从未在Automapper中遇到过这种奇怪的行为。首先,我使用Automapper 3.3.0和实体框架6.1.3。我有一个方法,检索实体数据通过实体框架。在返回数据之前,它将其映射到域模型。除了三(3)个属性之外,相关属性的名称在实体和域之间匹配,因此您将在我提供的示例代码中看到,在创建映射时只有三(3)个remember调用。

这在大多数情况下都很好,正如我所期望的那样。然而,偶尔,除了三(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中来回调试模式时,似乎会发生这种情况。它好像忘记了如何映射那些属性。传入的实体数据确实总是包含这些值,顺便说一下,它只是无法将它们中的三个映射到域。

任何帮助都将非常感激。谢谢!

Automapper有时无法映射通过ember设置的属性

映射器。CreateMap不是线程安全的(也从来没有真正打算这样做)。您应该只在启动时创建一次地图,通常是在ASP启动时创建。