2013-03-16 59 views
0

时,ObjectStateManager中已存在具有相同关键字的对象,因此我之前发布了一个问题,但未收到太多反馈。可能是我解释错了。当你的知识有限时,很难问正确的问题。总而言之,我有三个EF实体:Books,Pages和Content - 书中有许多页面,一页只有一个内容。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个新条目)?

+0

您是否试图在同一个过程中添加第二个页面?或者我的页面已经存在于数据库中,并且您尝试添加第二页? – Silagy 2013-03-16 09:00:49

+0

此时没有任何内容保存在数据库中。数据库只包含内容条目。我想要做的是创建一本新书,然后创建一个新页面(数据库中已经存在的内容),另一个,另一个...一旦我完成了,我想保存一个新的书(数据库条目)及其所有页面(包含FK到内容的数量的数据库条目) – esper 2013-03-16 09:06:48

+0

在'页面'的关系中,2页可以引用相同的内容吗?这就是问题在这里的样子(除非在每次调用中将“Id”更改为其他内容)。 – James 2013-03-16 09:31:22

回答

0

交换两行:

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

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

+0

我已经尝试过这么多的东西,这一个是他们中的一个,但现在我不记得,如果我得到同样的错误。我会试试这个并回复你。关于重新发布的评论 - 你说得对,我要删除我的第一个问题 – esper 2013-03-17 16:27:14

相关问题