EF -在向关联中添加现有实体时,ObjectStateManager中已经存在具有相同键的对象

本文关键字:对象 存在 ObjectStateManager 关联 添加 EF 实体 | 更新日期: 2023-09-27 18:04:06

所以我之前发布了一个问题,但没有收到太多反馈。可能是我解释错了。当你的知识有限时,很难提出正确的问题。

总结一下,我有三个EF实体:Books, Pages和Content——书有许多页,而一页只有一个内容。

我已经有内容条目,我不需要创建它们,只是在我的页面实体中引用它们。所以我要做的是:

//Add a new Book
var myBook = new Book();
//Add a new page
var myPage = new Page();
//I'm selecting this one from an asp.net dropdown box
var myContent = contentService.get(id); 
//Connect the page and content
myPage.Content = myContent;
//Add a page to the book
myBook.Pages.Add(myPage)

当我添加第一页时,一切都很好,但当我试图添加第二页到我的书时,我得到一个异常。如果我注释掉我将myContent赋值给导航属性的那行(myPage。内容= myContent)错误消失

重要的问题是……当页面引用已经存在的数据库条目时,如何添加具有2页或更多页的新书(数据库中的2个新条目)?

EF -在向关联中添加现有实体时,ObjectStateManager中已经存在具有相同键的对象

交换两行:

myBook.Pages.Add(myPage);
myPage.Content = myContent;

原因是myBook.Pages.Add(myPage)myPage中整个对象图的状态改变为Added。因此,如果您先添加页面,然后分配内容,内容仍然是Unchanged