【问题标题】:Automapper maps correctly on first call but skips properties on second callAutomapper 在第一次调用时正确映射,但在第二次调用时跳过属性
【发布时间】:2013-01-10 21:15:25
【问题描述】:

我定义了以下类:

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 正确映射到 Clerk 对象的 InstrumentNo。但是,第二次调用 Action 时,InstrumentNo 不会被映射。 InstrumentNumber 肯定有一个值,但 InstrumentNo 仍然为空。

您有什么想法吗?

【问题讨论】:

  • 您在问题中输入的代码即使在多次运行时也能正常工作。所以 Automapper 似乎不是问题。我怀疑 Linq2SQL 生成的类或它在 ASP.NET 中的使用方式。没有更多的代码,很难说什么是错的。我会在 linq2sql 生成的类的属性设置器中设置断点。

标签: c# model-view-controller automapper


【解决方案1】:

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

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
相关资源
最近更新 更多