映射到现有对象ef核心后的自动映射器无法跟踪更改

时间:2019-01-04 05:17:31

标签: c# automapper ef-core-2.0

从数据库中提取对象(实体)列表后,我想更新那些对象,但只更新某些属性,然后将更改保存到DB,完成映射后,它将失去对更改的跟踪并且上下文未显示任何更改。 / p>

我尝试为AutoMapper制作自定义值解析器,但由于映射后ip仍然为0,我失败了。

这是代码段

class A { int id; string Name; }
class B { string Name;} 
List<B> b = new List<B>() { "t", "g" };

var result = ctx.A.ToList();
this.Mapper.Map<IList<B>,IList<A>>(b,result);
ctx.A.SaveChanges();

1 个答案:

答案 0 :(得分:1)

问题是您正在使用项目列表。

this.Mapper.Map<IList<B>,IList<A>>(b,result);

可以,将B值映射到result值...但是不要将result更改为新的对象类型,不是。此代码中没有任何内容告诉AutoMapper不要更改列表中的项目

这是因为Automapper无法关联b中的哪些项目应映射到result中的哪些项目。此外,如果商品数量不同,该怎么办?

您可以使用以下命令自己强制使用

result = result
  .Zip(b, (r,b2) => mapper.Map<B,A>(b2,r) )
  .ToList()

DotNetFiddleExample