2013-06-27 30 views
2

我有一個實體,它的主關鍵字int設置爲storegeneratedpattern = none,因此我們提供了id客戶端。具有storegeneratedpattern = none的實體框架4實體在保存時不會更新外鍵

此實體具有子實體,通過與導航和外鍵id的關聯引用它。

如果我創建一個新的父實體並添加一個子實體,然後設置父實體的主鍵並保存,那麼子實體的外鍵修復發生在保存之後並且不會持久化到數據庫。

engine = new Engine(); 
    part = new Part(); 
    engine.Parts.Add(part); 
    engine.Id = 6; 
    engineRepository.Save(engine); 

的保存很簡單

Context.Engines.AddObject(entity); 
Context.SaveChanges(); 

保存後 「部分」 將有一個外鍵 「ENGINEID」= 6,但在數據庫中這將是 「ENGINEID」 = 0,即看起來修復發生在保存之後。

我在這裏錯過了什麼?如果引擎的存儲生成模式是身份認證,則一切正常。

回答

0

在這種情況下,分辨率似乎是您保存圖形兩次,一次創建修復起來,一次保存修復起來。這不是一個好的解決方案,我仍然不明白爲什麼我們必須這樣做,但至少這意味着我們可以讓EF處理id分辨率。

0

我認爲如果您要爲引擎創建自己的ID,則還必須爲該部分創建它。

engine = new Engine(); 
part = new Part(); 

part.engineid = 6 

engine.Parts.Add(part); 
engine.Id = 6; 
engineRepository.Save(engine); 
+0

這是一種可能性,但它意味着整個汽車修復EF的好處被否定。實際上,我們有一個巨大的圖表,必須走整個過程來設置所有適當的ID。我提供了我們最終在下面使用的答案。 –