如何使用DbContext正确保存未附加的对象图?

时间:2013-06-03 13:55:38

标签: c# entity-framework dbcontext

我完全有可能使用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();
}

但是这会失败,因为它将myExistingItem的状态设置为根item状态(因此,当我调用SaveChanges时,它会尝试重新创建数据库中已存在的项并抛出主键违规错误)。

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

0 个答案:

没有答案