映射到现有对象 ef core 后的 Automapper 无法跟踪更改

Automapper after mapping to existing object ef core can't track changes

从数据库中提取对象(实体)列表后,我想更新这些对象但只更新某些属性并将更改保存到数据库,映射完成后它会丢失更改跟踪并且上下文不显示任何更改.

我尝试为 AutoMapper 制作自定义值解析器,但我惨遭失败,因为映射后 ips 仍然为 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();

问题是您使用的是项目列表。

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

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

这是因为 Automapper 无法将 b 中的哪些项目映射到 result 中的哪些项目。另外,item个数不一样怎么办?

您可以自己强制使用:

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

DotNetFiddleExample