Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AutoMapper 9.x如何更新现有实体对象_C#_Automapper_Aspnetboilerplate - Fatal编程技术网

C# AutoMapper 9.x如何更新现有实体对象

C# AutoMapper 9.x如何更新现有实体对象,c#,automapper,aspnetboilerplate,C#,Automapper,Aspnetboilerplate,我试图将我的项目移动到AutoMapper 9.x,但我没有找到更新从EF读取的对象的解决方案 这种情况就像这篇旧文章所描述的那样 最大的问题是: AutoMapper 9.x删除了静态Mapper.Map,您可以添加[AutoMap(typeof(x))]属性,但它解决了从EF类到DTO类的映射问题 类MyPoco{ 公共int Id{get;set;} } [自动映射(类型(MyPoco))] 公共类客户{ 公共int Id{get;set;} } MYPOCO pocodec=dbCont

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

这种情况就像这篇旧文章所描述的那样

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

类MyPoco{
公共int Id{get;set;}
}
[自动映射(类型(MyPoco))]
公共类客户{
公共int Id{get;set;}
}
MYPOCO pocodec=dbContext.DD_POCO.SingleOrDefault(m=>m.Id==123);
//不支持下面的行
AutoMapper.Mapper.Map(customerSrc、pocodec);
dbContext.Save();
目前唯一的解决方法是删除AutoMapper并逐个手动绑定属性

更新

经过一些测试后,我试着和电话进行比较

ObjectMapper.Map(input.Article, article);
        Mapper.Instance.Map(input.Article, article);
ObjectMapper来自DI。在启动模块中,我通过IMapperConfigurationExpression注册

mapper.CreateMap().ConvertUsing((src,dto)=>{
//为简洁起见,删除
});

我看到静态API未通过将我的自定义映射抛出到使用自定义映射的ObjectMapper的对面。目前我不明白为什么,但我尝试进行更多的调查,而不是使用静态映射器.Map,首选的方法是使用依赖注入,并将映射器注入到需要它的服务中。静态映射从不需要映射EF类。只需注入映射器实例,就像注入
dbContext
一样,或者创建自己的映射器单例实例,例如
static类MyMapper{static MyMapper(){/*initialize here*/}public static mapper{get;private set;}
。但是正确的解决方案是使用依赖项注入您的代码是什么样子的,特别是使用映射器及其类的方法?如何将依赖项传递给它们?如果你想要一个具体的答案,这很重要。例如,在.NET核心项目中,DI是一个标准特性。在ASP.NET MVC中,注入映射器所需的代码取决于实际使用的DI容器。我的项目基于ASP.NET样板文件V4.8.1(框架使用Castle for DI)。因此,如果我理解正确,建议使用IMapper通过DI注入(在我的情况下,我可以使用ObjectMapper通过DI精确地进行注入)来代替Mapper.Map?这就是想法:)