2012-11-14 77 views
0

不知道我是否誤解了EF Code的工作原理或設置錯誤。我創建了一個有很多ChartResults的圖表POCO。簡單一對多。我可以先用EF代碼關閉此鏈接行爲嗎?

當我做

Chart myChart = new Chart(); 
myChart.ChartResults.Add(new ChartResult(){Pos=1}); 
myChart.ChartResults.Add(new ChartResult(){Pos=2}); 
context.Charts.Add(myChart); 
context.Save(); 

我得到一個圖表添加,然後眼淚通過所有的圖表結果,並補充說,到數據庫了。這非常巧妙,但是問題出在chartResults上,有時我想添加,有時候我想簡單地更新引用。但我怎麼做到這一點沒有:

1) going through each Chart and adding it to a new object that is unlinked 
2) then going through each ChartResult and explicitely deciding what to do/not do? 
+0

您不必將myChart添加到上下文中,也不必立即保存它。這允許您以任何您想要的方式操作POCO,直到準備好寫入數據庫爲止。但是,在上面的示例中,EF正在按照您的要求進行操作。 –

+0

@HughJones圖表實例在某些時候需要添加到上下文中,如果要將這些更改提交到數據庫,則需要調用SaveChanges()。 –

+0

@Jason - 當然,但如果你想操縱POCOs,你可以推遲分貝寫,直到你準備好了。這是我的觀點。 –

回答

0

,如果你知道哪些chartresults補充和更新,那麼你可以加載chart,並添加所有新chartresult實例。那麼您可以查詢現有的chartresults並單獨更新它們。

或者您可以循環訪問chartresults並確定是否需要添加或更新實體。

順便說一句:如果EF通過EDMX或代碼優先映射,這是無關緊要的。這只是你如何與實體交互,而不是如何映射實體。

+0

所以你基本上說,我想我必須這樣做的方式實際上是我必須這樣做的方式嗎?即添加一個路由節點到上下文並調用.SaveChanges()將創建所有子實體...?... – Exitos

+0

SaveChanges()會將所有更改提交給與'dbcontext'相關聯的實體。 –

+0

對吧,好吧,我最好嘗試一下,找到一種乾淨的方式來做飯,並做到這一點!謝謝!.... – Exitos

相關問題