我定义了以下类:
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;}
}
现在,在我的global.asax
中,我在Application_Start()
中定义了以下映射。
Mapper.CreateMap<ImageIndexModel, Clerk>()
.ForMember(dest => dest.InstrumentNo,
opt => opt.MapFrom(src => src.InstrumentNumber));
最后,在我的一个控制器中,我有以下代码:
var _existing = new Clerk();
var _default = new ImageEditModel() {
InstrumentNumber = "12345678", Description = "Test"
};
Mapper.Map(_default, _existing);
我第一次在我的控制器上调用Action并运行此映射时,一切正常,InstrumentNumber
正确映射到InstrumentNo
对象的Clerk
。但是,第二次调用Action时,InstrumentNo
不会被映射。 InstrumentNumber
肯定有值,但InstrumentNo
仍然为空。
任何想法可能会发生在这里?
答案 0 :(得分:1)
我曾经遇到过相反的问题,那里发生了太多的映射。它是通过调用mapper.reset()解决的,如here for potentially other reasons所述。您的应用程序中的其他内容可能是从您下面重置您的映射器,以便它不再解析您认为应该映射的映射(并且会在短时间内完成)?另一个问题的关键是Automapper是单例,因此代码的另一部分可以加载或后期绑定并在不知情的情况下将其弄糟。