gpt4 book ai didi

c# - Automapper 有时无法映射通过 ForMember 设置的属性

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:15 25 4
gpt4 key购买 nike

我以前从未在 Automapper 遇到过这种奇怪的行为。首先,我使用的是 Automapper 3.3.0 和 Entity Framework 6.1.3。我有一个通过 Entity Framework 检索实体数据的方法。在返回数据之前,它将数据映射到域模型。除了三 (3) 个属性之外,相关属性的名称在实体和域之间匹配,因此您将在我提供的示例代码中看到,在创建 map 时只有三 (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 中使用 Debug模式来回切换时,似乎会发生这种情况。就像它只是忘记了如何映射这些属性一样。传入的实体数据始终包含值,顺便说一下,它只是无法将它们三个映射到域。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

Mapper.CreateMap 不是线程安全的(也不是真正的意图)。您应该只在启动时创建一次 map ,通常在 Global.asax 的 App_Start 中为 ASP.NET 应用程序启动。

关于c# - Automapper 有时无法映射通过 ForMember 设置的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com