我完全有可能使用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时,它会尝试重新创建数据库中已存在的项并抛出主键违规错误)。
我可以做些什么来自动检测更改和预先存在的对象,还是我必须自己编写代码来检查对象图?