Самостоятельная модель в EF Code First 4.1 выдает исключение «Коллекция была изменена» - PullRequest
3 голосов
/ 27 августа 2011

Я пытаюсь смоделировать следующее с помощью EF 4.1 и не могу преодолеть это исключение («Сбор был изменен; операция перечисления может не выполняться»).

Модель:

public class Workflow
{
    public List<WorkflowStage> Stages { get; set; }
}

public class WorkflowStage
{
    public virtual List<WorkflowNextStage> WorkflowNextStages { get; set; }
}

public abstract class WorkflowNextStage
{
    public virtual WorkflowStage NextStage { get; set; }
}

public class SuccessStage : WorkflowNextStage
{
}

public class FailureStage : WorkflowNextStage
{
}

Конфигурация:

    modelBuilder.Entity<WorkflowStage>()
            .HasMany(x => x.WorkflowNextStages)
            .WithRequired()
            .Map(m => m.MapKey("CurrentStageId"));

    modelBuilder.Entity<WorkflowNextStage>()
            .HasRequired(x => x.NextStage)
            .WithMany()
            .Map(x => x.MapKey("NextStageId"))
            .WillCascadeOnDelete(false);

Код ошибки:

    using (var ctx = new SBContext())
        {
            var workflow = new Workflow();
            var stage = new WorkflowStage();
            stage.WorkflowNextStages = new List<WorkflowNextStage>
                                           {
                                               new SuccessStage() {NextStage = stage},
                                               new FailureStage() {NextStage = stage}
                                           };

            workflow.Stages = new List<WorkflowStage> {stage};

            ctx.Workflows.Add(workflow);
            ctx.SaveChanges();
        }

Настройка «новой SuccessStage» выше на другую стадию работает просто отлично.

Я немного озадачен этим ... у кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 10 декабря 2012

Есть ли у вас цикл foreach, где вы перебираете коллекцию, которую вы модифицируете?Если это так, это может вызвать эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...