4.1修改对象和子集合



如果我有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

相关内容

  • 没有找到相关文章

最新更新