gpt4 book ai didi

c# - Automapper项目使用

转载 作者:行者123 更新时间:2023-11-30 15:57:57 25 4
gpt4 key购买 nike

我目前在后端使用自动映射器将对象映射到模型。我最近决定使用以下代码来处理我所有的时区转换:

  cfg.CreateMap<DateTime?, DateTime?>()
.ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours));

cfg.CreateMap<DateTime, DateTime>()
.ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours).Value);


Object.ProjectTo<ObjectModel>().SingleOrDefault();

然后它工作正常并且对象被映射并且时区被转换

然而,当我在我的业务层中使用以下代码进行单个对象映射时:

Mapper.Map<Object, ObjectModel>(singleRecord); 

它给出了一个错误:此函数只能从 LINQ to Entities 调用。

堆栈跟踪:

at System.Data.Entity.DbFunctions.AddHours(Nullable`1 timeValue, Nullable`1 addValue)
at lambda_method(Closure , DateTime , DateTime , ResolutionContext )
at AutoMapper.ResolutionContext.Map[TSource,TDestination](TSource source, TDestination destination)
at lambda_method(Closure , Inventory , InventoryModel , ResolutionContext )

Mapper.Map 在特定情况下使用很重要,我也不想投影单个记录。

有办法解决这个问题吗?

最佳答案

默认情况下,AutoMapper 将构建一个映射 Func<TSource, TDestination>>Map 使用通过编译 Expression<TFunc<TSource, TDestionation>> 的方法传递给 ProjectUsing并被 ProjectTo 使用,因为通常它就足够了并且有效。但不是 EF 规范函数。

您可以通过指定与 Map 一起使用的不同转换来覆盖该行为通过显式提供 ProjectUsing 的方法和 ConvertUsing :

var map1 = cfg.CreateMap<DateTime?, DateTime?>();
map1.ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours));
map1.ConvertUsing(i => i?.AddHours(offset.Hours));

var map2 = cfg.CreateMap<DateTime, DateTime>();
map2.ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours).Value);
map2.ConvertUsing(i => i.AddHours(offset.Hours));

关于c# - Automapper项目使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44257252/

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