2014-05-08 141 views
1

我有兩個表。客戶和對話。在創建/編輯客戶端的視圖中,還可以選擇添加與客戶端關聯的對話(使用BeginCollectionItem)。當我嘗試使用以下代碼更新(在編輯視圖中):實體框架嵌套實體添加或更新

db.Clients.Attach(client); 
db.Entry(client).State = EntityState.Modified; //Conversations not added 

客戶端表中的字段已更新,但未添加對話。在創建客戶端時我不會遇到這個問題。

db.Clients.Add(client); //Conversations are added 

是否有可能在不必明確添加對話的情況下完成此操作?

回答

1

首先連接客戶端,然後將談話添加到它:

var client = db.Clients.Attach(new Client()); 
client.Conversations.Add(conversation); 

db.SaveChanges(); 

無需更改客戶端的狀態編程..如果您將客戶端的情況下第一,實體框架將跟蹤更改。

編輯:

因爲當你把它連接到上下文對象已建成,你需要告訴談話孩子要麼被添加或修改

foreach (var conversation in client.Conversations) 
{ 
    if (conversation.Id == default(int))   
     context.Entry(conversation).State = EntityState.Added; 
    else 
     context.Entry(conversation).State = EntityState.Modified; 
} 
+0

我很抱歉,如果EF我點不清楚,我沒有在代碼中手動添加對話。他們被綁定在回發的模型中。對話已經與客戶端相關聯。現在,如果我要採用您的代碼,我再次需要將對話明確地鏈接到客戶端。 – xrnd

+0

馬丁,它的工作,但我仍然覺得它更明確。我會認爲這些任務是在後臺執行的。現在工作!謝謝 – xrnd