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

标签 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));

最后,在我的一个 Controller 中,我有以下代码:

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

我第一次在 Controller 上调用 Action 并运行此映射时,一切正常,InstrumentNumber 正确映射到 InstrumentNo职员 对象。但是,第二次调用 Action 时,InstrumentNo 没有被映射。 InstrumentNumber 确实有一个值,但 InstrumentNo 仍然为空。

知道这里会发生什么吗?

最佳答案

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

关于c# - Automapper 在第一次调用时正确映射,但在第二次调用时跳过属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267390/

相关文章:

model-view-controller - 模型和 View 交互的 mvc 模式有多严格?

java - 有没有像 Observable ConcurrentLinkedDeque 这样的东西?

entity-framework - Entity Framework 6 数据库优先和洋葱架构

c# - 如何使用 AutoMapper 将多个子类映射到一个类中?

c# - 如何识别域模型中的聚合根?

c# - 不同文化的 Umbraco 404 不工作

php - 在 PHPDoc 中记录 Controller 操作的好方法?

c# - 远程方法调用的 .NET 标准是什么?

c# - 如何创建应用程序的 WPF 交互式导览