【问题标题】:Self referencing model in EF Code First 4.1 throws 'Collection was modified' exceptionEF Code First 4.1 中的自引用模型引发“集合已修改”异常
【发布时间】:2011-08-27 16:26:55
【问题描述】:

我正在尝试使用 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”设置为不同的阶段就可以了。

我对这个有点难过……有人有什么想法吗?

【问题讨论】:

  • 很乐意提供帮助,请粘贴整个堆栈跟踪,因为它可能对这里有帮助。您收到的整个错误是什么?它在哪一行中断?

标签: ef-code-first


【解决方案1】:

您是否有一个 foreach 循环在其中迭代您正在修改的集合?如果是这样,这可能会导致此错误。

【讨论】:

    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多