Я пытаюсь смоделировать следующее с помощью 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» выше на другую стадию работает просто отлично.
Я немного озадачен этим ... у кого-нибудь есть идеи?