2011-10-27 9 views
0

を保存し、各後に複製されエンティティフレームワーク4.1 - 子オブジェクトのコレクションは、私はEntity Frameworkの(EF4.1 - CodeFirst)に問題を抱えている

それは基本的に子オブジェクトを複製しています...

オブジェクトモデルは、ジョブ内のタスクの数です - >タスクTaskType属性を持っており、TaskType属性は、ステータスの数を持っていることを...

最初は私がこれを追加した後、しかし

を保存するにTaskTypesを複製しましたそれはTaskTypesの複製を停止しました...

context.Entry(task.TaskType).State = EntityState.Unchanged; 

だから私は...ステータスのために影響を受け、次の...

「ストア更新、挿入、または削除ステートメントを使用して

 //tried this but it errors 
     foreach (var status in task.TaskType.Statuses) 
     { 
      context.Entry(status).State = EntityState.Unchanged; 
     } 
     //// 

しかし、エラーがこれを試してみました予想外の行数(0)。エンティティはロードされた後に変更または削除された可能性があります。 ObjectStateManagerのエントリを更新します。」相続人

フルでコードを...

using(var context = new JobContext()) 
    { 
     var job = //Get with Includes; 
     job.Tasks.Add(task); 

     context.Jobs.Attach(job); 

     context.Entry(task.TaskType).State = EntityState.Unchanged; 

     //tried this but it errors 
     foreach (var status in task.TaskType.Statuses) 
     { 
      context.Entry(status).State = EntityState.Unchanged; 
     } 
     //// 

     context.SaveChanges(); 
    } 

誰でもしてください助けることはできますか?

答えて

1
using(var context = new JobContext()) 
{ 
    var job = //Get with Includes; 
    context.Jobs.Attach(job); 
    // can be omitted if "Get with Includes" happens in the same context 

    context.TaskTypes.Attach(task.TaskType); 
    // attaches TaskType and all Statuses -> State is Unchanged 

    job.Tasks.Add(task); 
    // A new task will be created after SaveChanges. If you don't want that 
    // replace Attach(task.TaskType) above by Attach(task) 

    context.SaveChanges(); 
} 

あなたドン(GETコードの一部では、読みやすくするためにトリムダウン)この場合、Includeをロードする必要があります。Includeなしでロードできます(空のコレクションjob.Tasks = new List<Task>()を作成してください)。

関連する問題