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