【发布时间】:2017-08-09 12:07:59
【问题描述】:
我有一个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 一起工作,以便理解上述内容 - 还是手动映射所有内容更好? (就我而言,需要做很多工作)
【问题讨论】:
标签: c# entity-framework entity-framework-6 automapper