2011-10-27 28 views
0

我在與實體框架問題(EF4.1 - CodeFirst)實體框架4.1 - 子對象集合每個複製後保存

它基本上是複製的子對象......

對象模型是一個數字作業中的任務 - >任務有任務類型和任務類型有一些狀態的...

起初人們對複製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; 
     } 
     //// 

但它的錯誤有以下...

「商店UPDATE,INSERT或DELETE語句影響意外數量的行(0)。自實體加載後,實體可能已被修改或刪除。刷新ObjectStateManager條目。」

繼承人全部代碼...(與一些GET代碼的下調對可讀性)

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

你不不需要加載Include順便說一句,你可以在沒有Include的情況下加載(然後創建一個空集合job.Tasks = new List<Task>()