2009-11-18 106 views
1

我一直在爭取一段時間。我正在嘗試實施多對一的關聯。我在表中有一堆行,稱爲讀數。隨着時間的推移,這些會不斷累積,我偶爾想要將它們導出。當我導出它們時,我想創建一個名爲ExportEvent的新對象,以跟蹤哪些行被導出,因此可以在需要時重新導出它們。因此,在我導出它們之前創建讀數時,Reading與ExportEvent之間存在可空的外鍵關係。LINQ to SQL - 檢索對象,修改SubmitChanges()創建新對象

什麼我的發現是,當我再做出口,無論是我第一次創建ExportEvent(EVT)和使用

evt.Readings.AddRange(), 

添加讀數或者如果我使用

foreach(reading) 
reading.ExportEvent = evt 

當我打電話給SubmitChanges時,我總是得到一組新的讀數,並且這個讀數是通過關聯創建的,並且原始記錄沒有更新。

我把這個迴歸到最簡單的一點,只是爲了看看我能否創建兩個沒有關聯的對象,甚至發現當我剛剛檢索所有讀數並更新了它們的int值時,submitchange仍然插入了一個一堆新紀錄。這是怎麼回事?

+0

我已經回滾了這個問題。我認爲這是一個真正的好問題,一個好的答案可以幫助其他人開始使用Linq。 – 2009-11-18 10:50:27

回答

0

我懷疑是因爲你打電話給AddRange()。這會將新對象添加到數據上下文中。相反,您應該嘗試在數據上下文中重新添加名爲Attach()的現有對象。

(或者,如果你從來沒有脫離他們仍然有自己的原始數據背景下,你不需要做任何事情,只是使更改的對象,並調用SubmitChanges()

3

嗯。有趣的 - 只要在我的書籤中點擊這個鏈接,發現問題已經復活,所以會提供(令人尷尬的)解決方案。我所有的實體都有審計數據屬性 - CreatedDate和UpdatedDate。因此,我已經實現了在datacontext中插入和更新每個實體的部分方法。我已經複製並粘貼了這些插入和更新方法的新插入和更新方法(這是導致某些失敗的原因)。因此,我也複製了一個錯誤,其中Update [blah]方法調用ExecuteDynamicInsert而不是ExecuteDynamicUpdate。

足以說我3個小時的時候非常沮喪,我一直在瘋狂地試圖解決這個問題,只是發現它是由於一個(愚蠢的)複製/粘貼錯誤 - 只能找到約3分鐘後,我發佈了這個問題!

希望這可以幫助別人。