2

我完全有可能特别糟糕地使用 DbContext,但我最终遇到了一种情况,即我试图保存一个未附加的对象图,其中并非图的所有元素都是新的。例如,我有一个这样的 POCO 实体:

var item = new MyClass();
item.RelationshipOne = myExistingItem; //loaded by some other mechanism
item.RelationshipTwo = new MyOtherClass();

目前我的插入或更新方法包含的代码有点像这样:

using (var context = new MyContext())
{
  context.Entry(item).State = item.ID == 0 ? EntityState.Added : EntityState.Modified;
  context.SaveChanges();
}

但这失败了,因为它将状态设置为myExistingItemitem状态(因此当我调用 SaveChanges 时,它会尝试重新创建数据库中已经存在的项目并引发主键冲突错误)。

我可以做些什么来自动检测更改和预先存在的对象,还是我必须自己编写代码来检查对象图?

4

0 回答 0