首页 > 解决方案 > AutoMapper 9.x 如何更新现有实体对象

问题描述

我尝试将我的项目移动到 AutoMapper 9.x,但我找不到更新从 EF 读取的对象的解决方案。

情况就像这篇旧帖子使用 Automapper 更新现有实体 POCO中所描述的那样

最大的问题是:AutoMapper 9.x 删除了静态 Mapper.Map,您可以添加 [AutoMap(typeof(x))] 属性,但它解决了从 EF 类到 DTO 类的映射。

class MyPoco{
    public int Id {get;set;}
}

[AutoMap(typeof(MyPoco))]
public class Customer {
    public int Id { get;set; }
}

    MYPOCO pocoDesc= dbContext.DD_POCO.SingleOrDefault(m => m.Id == 123);
    //Row below not supported
    AutoMapper.Mapper.Map<Customer, MYPOCO>(customerSrc, pocoDesc);
    dbContext.Save();

目前唯一解决的办法就是去掉AutoMapper,手动一一绑定属性。

更新

经过一些测试后,我尝试比较调用

ObjectMapper.Map(input.Article, article);
        Mapper.Instance.Map(input.Article, article);

ObjectMapper 来自 DI。在启动模块中,我通过 IMapperConfigurationExpression 注册

    mapper.CreateMap<Customer,MyPoco>().ConvertUsing((src,dto) =>{
// remove for brevity
});

而且我看到静态 API 没有通过将我的自定义地图与使用我的自定义地图的 ObjectMapper 相对。目前我不明白为什么,但我尝试进行更多调查

标签: c#automapperaspnetboilerplate

解决方案


推荐阅读