如果我的Book对象有一个子集合的注释,我可以与实体框架一起更新Book和Comments列表吗?
我试过了:
_context.Books.Attach(book);
_context.ObjectStateManager.ChangeObjectState(book, EntityState.Modified);
_context.SaveChanges();
没有运气......
在第一行收到以下错误:
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key
答案 0 :(得分:2)
很可能你有一个循环依赖(Books有一个外键引用注释,而注释返回Books)。在这种情况下,EF中的UpdateTranslator无法确定依赖顺序。据我所知,在这种开发模式中,没有办法向EF传递提示来指示订单是什么。
解决此问题的最常见方法(我已经看到)是进行两阶段提交。对书进行更改,保存,然后对注释进行更改,并保存。我发现使用Code First方法可以让您更加具体地了解关系,从而解决我遇到的许多问题。
编辑:
这是一个例子:
using (var context = new BookContext())
{
book.Title = "This is the new title";
context.SaveChanges();
book.Comments.Add(new Comment("This is a comment"));
context.SaveChanges();
}
如果存在循环依赖关系,则只需调用SaveChanges
即可完成上述操作。