如果我有Book对象,它有评论的子集合,我可以更新Book和评论列表与实体框架一起吗?
I have try:
_context.Books.Attach(book);
_context.ObjectStateManager.ChangeObjectState(book, EntityState.Modified);
_context.SaveChanges();
with no luck…
第一行出现以下错误:
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key
很可能你有一个循环依赖(Books有一个外键引用到Comments,而Comments返回到Books)。在这种情况下,EF中的UpdateTranslator无法确定依赖顺序。据我所知,在这个开发模型中,没有办法向EF传递提示来指示顺序是什么。
解决这个问题最常见的方法(我所见过的)是进行两阶段提交。对Book进行更改并保存,然后对Comments进行更改并保存。我发现,使用"代码优先"方法可以让您更具体地了解关系,从而解决我遇到的许多问题。
编辑:
下面是一个例子:
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
。