2012-08-07 34 views
0

我與兩張桌子有一對多關係,Parent有很多Child。 我創建一個父項並向其添加子項。然後,我創建它(如果它是一個新父項)或更新它(如果它已經存在)。創建它時,一切正常。但是,如果我更新它,孩子們不會更新。如何更新實體框架中的子表?

using (var Repo = new ParentRepository(context)) 
{ 
    var key = new AnnualFormKey(prnt.Year, prnt.UserId); 
    if (Repo.Retrieve(key) == null) 
    { 
     prnt.CreatedDate = DateTime.Now; 
     prnt.CreatedId = 1; 
     Repo.Create(prnt); 
     Repo.SaveChanges(); //creates parent and children 
    } 
    else 
    { 
     prnt.UpdatedDate = DateTime.Now; 
     prnt.UpdatedId = 2; 
     Repo.Update(prnt); 
     Repo.SaveChanges(); //updates parent but not children 
    } 
} 

(注:更新調用_context.Entry(orginal).CurrentValues.SetValues(entity)

這是我的上下文中的問題,或者我需要做些別的事情

回答

-1

好吧,我更深入地研究了這一點,發現實體框架並沒有實際更新複雜的實體(因爲它不會保存ch ildren)。有很多複雜的解決方法,但我的很簡單。我剛剛刪除了現有實體並再次創建它(使用更新後的版本)。

+2

只需提及:不幸的是,在大多數情況下,您需要「複雜的變通辦法」,因爲您不能總是刪除舊的實體,因爲數據庫中可能有其他實體引用父或子外鍵約束或因爲您想保留一些列值不變,只更新其他一些列。你有幸在你的情況下:) – Slauma 2012-08-07 22:26:21

1

留下你的電話Repo.Update(prnt),除非你明確分離的對象?在Repo.Retrieve。它已經被跟蹤。

+0

當我這樣做,它無法改變父母。這是跟蹤我的問題嗎? – proseidon 2012-08-07 20:46:48

+0

無法真正從你在那裏發佈的代碼中辨別出來。如果我的解決方案不起作用,那麼我認爲您的回購正在做比平常更復雜的事情! – Richard 2012-08-07 21:02:57