c# - 是否可以在 AfterMap 中调用 Mapper.Map?

标签 c# automapper

以某种方式允许这样的事情吗?

CreateMap<UserViewModel, User>()
    .ForMember(u => u.Password, o => o.Ignore())
    .AfterMap((src, dest) => {
        ...
        var entity = Mapper.Map<Entity>(src.SomeProperty);
        ...
    });

对我不起作用,它说试图在 AfterMap 中使用的映射不存在。

最佳答案

我注意到您在映射中使用静态 AutoMapper 类,但是您是否还在映射之外使用静态实例并且它是否为您的 Entity< 配置了映射类?

下面的工作,请注意 context.Mapper 调用确保相同的 AutoMapper 实例用于调用 Map 和后续 AfterMap 方法。

var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<UserViewModel, User>()
       .AfterMap((source, destination, context) => 
       { 
            var entity = context.Mapper.Map<Entity>(source.SomeProperty);
       });

    cfg.CreateMap<EntityViewModel, Entity>();
});

var mapper = config.CreateMapper();

var viewModel = new UserViewModel
{
    Name = "Test User",
    SomeProperty = new EntityViewModel 
    { 
        Value = "Sub Class" 
    }
};

var user = mapper.Map<User>(viewModel);

关于c# - 是否可以在 AfterMap 中调用 Mapper.Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39187208/

相关文章:

c# - Automapper 不适用于列表?

c# - AutoMapper map 子属性也定义了 map

Automapper 从包含对象列表的源到目标的映射

c# - 双向映射有什么问题?

c# - 如何将 C# 通用方法调用分派(dispatch)到专用方法调用中

c# - 添加 RigidBody 后,Collider 如何从 GameObject 掉落?

c# - 将 Canvas 打印到 XPS 不需要的缩放和切断

c# - AutoMapper 展平嵌套集合

c# - 如何获取要在 MVC 2 中显示的位图图像

c# - 使用 JSON.Net CustomCreationConverter