2012-07-23 52 views
2

我在EF4.1 Code First中創建一個數據庫。我有一張表,MedicalPlan,與CoverageLevel有一對多的關係。 CoverageLevel主鍵正在遞增。當我創建了MedicalPlan我宣佈coveragelevels並創建這些表,就像這樣:編輯列表中的對象<objects>而不創建該對象的新實例?

medicalPlan.CoverageLevels = new List<CoverageLevel>(); 
medicalPlan.CoverageLevels.Add(new CoverageLevel() { Cost = 1200, Description = "single" }); 
medicalPlan.CoverageLevels.Add(new CoverageLevel() { Cost = 1500, Description = "spouse" }); 
medicalPlan.CoverageLevels.Add(new CoverageLevel() { Cost = 1100, Description = "family" }); 

我也有,我會更新醫療計劃的更新功能。我還想要更新MedicalPlan的CoverageLevels的功能。在僞代碼,類似:

in medicalPlan edit first item in CoverageLevels() { Cost = 1500 }; 

起腳的是,我真的不希望更換的CoverageLevel,因爲它有一個獨特的自動遞增的主鍵,所以如果我創建一個新它將有一個不同於原來的主鍵。有沒有辦法以我嘗試的方式做到這一點?

+2

medicalPlan.CoverageLevels [0]。成本= 1500; ? – 2012-07-23 17:27:13

+0

是的,我不知道這種語法。我只用c#工作了大約一個月,所以偶爾我會在知識中找到這些差距,我只是想,'天哪,我真的不知道這是什麼語法'。在搜索時,我發現的所有內容都是創建一個新項目來替換舊項目。 – proseidon 2012-07-23 17:36:45

回答

2

一旦你已經從數據庫加載一個MedicalPlan您應該可以使用Linq或任何使用Linq的相關實體或通過MedicalPlan上的屬性直接訪問,就好像它是.NET對象的正常集合一樣。

調用保存會持續回到數據庫。

E.g.

var medicalPlan = GetMedicalPlanFromDataContext(); //example method 
medicalPlan.CoverageLevels.First().Cost = 1500; 
//OR 
medicalPlan.CoverageLevels[0].Cost = 1500 
medicalPlan.Save(); 

或者可能更容易..

var medicalPlan = GetMedicalPlanFromDataContext(); 
var coverage = medicalPlan.CoverageLevels.Where(x=>x.Description == "family").Single(); 
coverage.Cost = 1500; 
medicalPlan.Save(); 
+0

謝謝。該linq查詢特別有用。 – proseidon 2012-07-23 17:34:07

3

可以發生變異實體或相關實體在EF上下文,保存更改應妥善處理你的所有更新,而不需要創建新條目:

// get EF Context 
var firstCoverage = myMedicalPlan.CoverageLevels.FirstOrDefault(); 
if (firstCoverage != null) firstCoverage.Cost = 1500; 
// save changes 
+0

這工作得很好。謝謝您的回答。 – proseidon 2012-07-23 17:33:22

相關問題