实体框架4.1修改对象和子集合

时间:2011-04-28 16:57:56

标签: c# .net linq entity-framework entity-framework-4

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

1 个答案:

答案 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即可完成上述操作。