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

时间:2013-01-10 21:15:25

标签: 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;}
}

现在,在我的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仍然为空。

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

1 个答案:

答案 0 :(得分:1)

我曾经遇到过相反的问题,那里发生了太多的映射。它是通过调用mapper.reset()解决的,如here for potentially other reasons所述。您的应用程序中的其他内容可能是从您下面重置您的映射器,以便它不再解析您认为应该映射的映射(并且会在短时间内完成)?另一个问题的关键是Automapper是单例,因此代码的另一部分可以加载或后期绑定并在不知情的情况下将其弄糟。