Automapper - 如何在没有Mapper.Reset的情况下进行投影时禁用缓存?

时间:2015-10-05 23:02:51

标签: asp.net-web-api automapper

我认为使用AutoMapper是一个非常常规的场景,它试图动态映射投影,以便不向数据库查询我不会使用的列:

var map = Mapper.CreateMap<Source, DestinationViewModel>();
map.ForAllMembers(opt => opt.Ignore());

if (conditionForFieldA)
  map.ForMember(vm => vm.FieldA, conf => conf.MapFrom(src => src.FieldAbc));
if (conditionForFieldB)
  map.ForMember(vm => vm.FieldB, conf => conf.MapFrom(src => src.FieldDef));
if (conditionForFieldC)
  map.ForMember(vm => vm.FieldC, conf => conf.MapFrom(src => src.FieldGhi));

似乎问题是AutoMapper会将映射设置缓存到Source和DestinationViewModel,并且不会接受/考虑不同的映射。这导致了我所面临的问题:它有时会遇到条件,但有时会遇到;无论这个简单的逻辑如何,它只会查询数据库中第一个调用Mapper.CreateMap后投影的相同列。

由于它是一个ASP.NET Web API项目,Mapper.Reset()似乎不是一个好的选择,因为AutoMapper设置只发生一次(Application_Start()),但如果我可以重置那个就太棒了非常具体的映射设置。

有没有人遇到过这样的场景,并且之前能够使用AutoMapper解决它?

谢谢!

0 个答案:

没有答案