EF - 将现有实体添加到Association时,ObjectStateManager中已存在具有相同密钥的对象

时间:2013-03-16 08:53:14

标签: c# asp.net entity-framework webforms

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

总而言之,我有三个EF实体:书籍,页面和内容 - 这本书有很多页面,一页只有一个内容。

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

//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.Content = myContent),则错误消失。

最大的问题是......当页面引用现有的数据库条目时,如何添加一个包含2个或更多页面的新书(数据库中有2个新条目)?

1 个答案:

答案 0 :(得分:0)

交换两行:

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

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