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