gpt4 book ai didi

c# - AutoMapper 混淆 ChangeTracker

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:28 24 4
gpt4 key购买 nike

我有一个 Project 对象,它由许多嵌套对象组成。

要将此对象保存到数据库:

  • 我只更改项目中的一个属性(作为测试),并将其传递给我的 DAL。
  • 我使用 EF 从数据库加载现有项目。
  • 我将更改后的项目映射到现有项目。
var existingProject = 
db.Project.Single(p => p.ID == changedProject.ID).Include(p => p.Something);

existingProject = Mapper.Map(changedProject, existingProject);

db.SaveChanges();

由于外键为空,这失败了,这并不奇怪,因为当我深入到更改跟踪器时,我可以看到它非常困惑:

var added = db.ChangeTracker.Entries().Where(e => e.State == EntityState.Added);

映射发生后,项目中的大量对象被标记为已添加(尽管项目中没有添加或删除任何对象,但我只更改了一个属性)。

这是因为 AutoMapper 创建了嵌套对象的新实例,而 EF 无法将它们与数据库中的现有对象相关联吗?

我已经在很多地方看到过这种方法,AutoMapper 是否有一种方法可以与 ChangeTracker 一起工作,以便它理解上述内容 - 或者手动映射所有内容是否更好? (很多工作,就我而言)

最佳答案

首先清除目标集合。如果要映射到现有 EF 集合,则需要 AutoMapper.Collection。

关于c# - AutoMapper 混淆 ChangeTracker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45590265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com