【问题标题】:Automapper after mapping to existing object ef core can't track changes映射到现有对象 ef core 后的 Automapper 无法跟踪更改
【发布时间】:2019-01-04 05:17:31
【问题描述】:

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

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

所以这里是代码sn-p

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();

【问题讨论】:

  • 你的代码没有改变result,所以没什么可改变的。在您的映射中,您有 (A,B) 不会编译,因为它们不是变量,它们是类。
  • 你是对的,我错过了
  • 检查 AutoMapper.Collection。

标签: c# automapper ef-core-2.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

【讨论】:

  • 我知道列表大小相同,tnx 你说得对,我考虑过 2 个列表的颜色,但是是的,我不知道 Zip 功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多