Automapper在第一次调用时正确映射,但在第二次调用时跳过属性

RHa*_*ris 5 c# model-view-controller automapper

我定义了以下类:

public class ImageIndexModel {
   public string Description {get; set;}
   public string InstrumentNumber {get; set;}
}

public class ImageEditModel : ImageIndexModel {
    public int TotalCount = 0;
}

public class Clerk {  //This is actually a class defined by LinqToSql
    public string Description {get; set;}
    public string InstrumentNo {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

现在,在我global.asax,我已经定义了以下映射Application_Start().

Mapper.CreateMap<ImageIndexModel, Clerk>()
   .ForMember(dest => dest.InstrumentNo,
              opt => opt.MapFrom(src => src.InstrumentNumber));
Run Code Online (Sandbox Code Playgroud)

最后,在我的一个控制器中,我有以下代码:

var _existing = new Clerk();
var _default = new ImageEditModel() {
                 InstrumentNumber = "12345678", Description = "Test"
               };
Mapper.Map(_default, _existing);
Run Code Online (Sandbox Code Playgroud)

我第一次调用Action我控制器上,这映射运行时,一切工作正常并且InstrumentNumber被正确地映射到InstrumentNo了的Clerk对象.但是,第二次调用Action时,InstrumentNo不会映射. InstrumentNumber肯定有一个值,但InstrumentNo仍然是null.

任何想法可能会发生在这里?

Gre*_*reg 1

我曾经遇到过相反的问题,即发生了太多映射。由于可能的其他原因,已按照此处所述调用 mapper.reset() 解决了该问题。也许您的应用程序中的其他内容正在从您的下方重置您的映射器,以便它不再解析您认为应该(并且在短时间内)的映射?另一个问题的关键是 Automapper 是单例的,因此代码的另一部分可以在您不知情的情况下加载或后期绑定并弄乱它。