Застрял с "EntityCollection уже был инициализирован."ошибка - PullRequest
2 голосов
/ 19 марта 2012

Инструмент: Visual Studio 2010
Язык: C #

Я только начал изучать Entity Framework, я застреваю в проблеме, когда бы я ниИспользовал код № 1, он работает нормально, но всякий раз, когда я использую код № 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);
    }
}

КОД № 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:

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

Вы не должны устанавливать EntityCollection, как вы делаете в prs.Courses = ppl.Courses. Коллекция уже инициализирована (согласно исключению). Вы изменяете его только с помощью Add ing Course экземпляров.

0 голосов
/ 19 марта 2012

Можете ли вы попробовать переместить инициализацию prs в цикл foreach.

...