【发布时间】: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