c# - 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 相对。目前我不明白为什么,但我尝试进行更多调查
解决方案
推荐阅读
- jenkins - 动态查找要上传到 Artifactory Jenkins 管道的文件
- ios - WKWebView 在 WKHTTPCookieStore 中设置 cookie 时不更新 document.cookie
- keras - Google ML 作业被随机终止并在没有给出原因的情况下重新启动
- c# - 声明对象集合的问题
- c# - 关于 Nuget 包的商店认证问题
- c# - 如果我想使用外部库从 C# 项目调用 Python 代码,我应该如何设置 Visual Studio 解决方案?
- javascript - Chart.js modal window
- outlook - Outlook Redemption 抛出 MAPI_E_OBJECT_CHANGED 错误,使用未包装的 RDOStore 保存 RDOMail
- c++ - Using a vector and string function to return a string?
- voltdb - VoltDB 9.0 真的支持 Java 11 吗?