2011-08-27 1 views
3

EF 4.1を使用して以下のモデルを作成しようとしています。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); 

失敗コード:異なる段階に上記の '新しいSuccessStage' を設定

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(); 
     } 

だけで正常に動作します。

私はこの1つに困惑しています...誰にもアイデアはありますか?

+0

ここで役立つように、スタックトレース全体を貼り付けてください。あなたが受け取るエラー全体とは何ですか?また、どのラインでそれが壊れていますか? – kingdango

答えて

0

変更しているコレクションを反復処理するforeachループがありますか?この場合、このエラーが発生する可能性があります。