4

我有一個對象Customer,導航屬性爲Days(天是一個單獨的表,其中有 - day_id,customer_id - FK)。如何更新EF中的導航屬性/相關表?

mycontext.Customers.ApplyCurrentValues(cust); 
mycontext.SaveChanges(); 

這隻更新了Customer的標量屬性,而不是日期。有沒有更新日期的智能方法? (沒有在幾天手動迭代..)?如果沒有 - 是否有更新第二個表格(天)的最佳做法? 如果可能的話,請寫明確使用的代碼。

p.s.我目前使用EF 4.0

回答

1

不,你不能在沒有手動迭代相關實體的情況下做到這一點。看看這個問題和答案可能會有所幫助。 MVC Entity Framework modifying child entities

+0

我得到的印象是它可能從這個[post](http://stackoverflow.com/questions/9606866/cannot-get-relationship-to-update-for-navigation-properties-in-entity - 框架),但無法實現它,這篇文章與我描述的情況無關嗎? – BornToCode

+1

@BornToCode:是的,您的評論中鏈接的帖子是不相關的,因爲您有一個導航*集合*更新,另一篇文章是關於更新導航*參考*。更新集合的方法是這樣的:http://stackoverflow.com/a/5540956/270591(雖然它是'DbContext'/EF> = 4.1,但是這個想法和代碼應該可以轉換爲'ObjectContext'/EF 4.0。) – Slauma

+0

感謝您耐心解答我的問題,我很感激。 – BornToCode

4

如果你想要一個簡單和容易的方式來處理斷開連接的對象,你可以使用GraphDiff庫。

mycontext.UpdateGraph(cust, map => map.OwnedCollection(x => x.Days)); 
mycontext.SaveChanges(); 

這將插入或更新的客戶對象,同時更新Days收藏爲好。

+1

只是爲了指出這一點,你需要將'myContext.Configuration.AutoDetectChangesEnabled'設置爲true(如果它被禁用)。 – fabriciorissetto