2

工具: Visual Studio 2010中
語言: C#卡住了「EntityCollection已經被初始化。」錯誤

我剛開始學習實體框架,我被困在一個問題,whenver我用編號#1,它工作正常,但每當我用CODE#2,我得到錯誤(貼在下面)

標題: InvalidOperationException異常是未處理的用戶代碼
錯誤消息「」EntityCollection已經被初始化。該InitializeRelatedCollection方法只應調用對象圖的反序列化期間初始化新EntityCollection「

//SchoolModel.Designer.cs 
public EntityCollection<Course> Courses 
{ 
    get 
    { //Blah blah code } 
    set 
    { 
     if ((value != null)) 
     {//Below statement is pointed by Visual Studio as Exception Thrower 
      ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<Course>("SchoolModel.CourseInstructor", "Course", value); 
     } 
    } 
} 

CODE#1:

List<string> list = new List<string>(); 
var prs = new Person(); 
using (var myEntity = new SchoolEntities()) 
{ 
    var result = myEntity.People; 
    foreach (var ppl in result) 
    { 
     list.Add(ppl.PersonID+","+ppl.FirstMidName); 
    } 
} 

CODE#2:

List<string> list = new List<string>(); 
List<Person> prsList = new List<Person>();//when using this list,problem started 
var prs = new Person(); 
using (var myEntity = new SchoolEntities()) 
{ 
    var result = myEntity.People; 
    foreach (var ppl in result) 
    { 
     list.Add(ppl.PersonID+","+ppl.FirstMidName); 

     //New code which raised exceptions 
     prs.PersonID = ppl.PersonID; 
     prs.FirstMidName = ppl.FirstMidName; 
     prs.LastName = ppl.LastName; 
     prs.Courses = ppl.Courses; 
     prsList.Add(prs); 
     //New code end 
    } 
} 

數據庫圖表:
Database Diagram from tutorial

實體圖:
enter image description here

PS:

+0

我對EF的CRUD操作更感興趣(我必須在一個項目中以最短的時間快速實現),現在沒有足夠的時間來詳細學習 – 2012-03-19 06:49:06

+1

您是否在不同的線程中重複使用上下文?上下文不是線程安全的。 – 2012-03-19 08:23:42

+0

@AkashKava我沒有使用任何線程,因爲我剛剛學習,+ 1的評論 – 2012-03-19 08:43:59

回答

3

您不應該像在prs.Courses = ppl.Courses中那樣設置EntityCollection。該集合已經初始化(根據例外情況)。您只能通過Add ing Course實例修改它。

+0

當我註釋掉//prs.Courses = ppl。培訓班;它開始工作,課程是一個導航屬性,如果我想提取人員的課程信息,那我該怎麼做? – 2012-03-19 19:23:30

+0

+1以獲得適當的迴應:) – 2012-03-19 19:25:45

+1

你已經撿起了:)。我認爲'ppl.Courses'有它的課程。你可以遍歷它並添加課程的副本到'prs.Courses'。 – 2012-03-19 19:30:44

0

你可以嘗試在foreach循環內移動prs的初始化。

+0

我只是做了這個,但同樣的錯誤,在我看來這不會有任何影響,以及我很想重用「prs」反對其臨時對象 – 2012-03-19 08:04:31