2012-04-20 52 views
0

我試圖用全新生成的POCO更新my optimizedSearch記錄的所有值,而不必手動復位都在我的LINQ到SQL對象的值要做到這一點,我設置我想不是空的任何值,然後撥打:。爲什麼Linq-To-Sql抱怨當我使用context.table.attach()時記錄已經存在?

 if (person.xosPodOptimizedSearch == null) 
     { 
      person.xosPodOptimizedSearch = record; 
     } 
     else 
     { 
      context.xosPodOptimizedSearches.Attach(record, true); 
      context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, record); 
     } 

這段代碼的目的是這樣,如果我person記錄不具有xosPodOptimizedSearch記錄,然後添加它。如果這個人有一個了,我希望它有什麼價值都在我剛剛創建的POCO更新。

然而,當這runns和運行.attach(record, true) Linq-to-sql拋出一個DuplicateKeyException occurred: Cannot add an entity with a key that is already in use,這是愚蠢的,因爲我知道一個記錄存在,這就是爲什麼我使用attach()而不是.InsertOnSubmit()

我怎樣才能獲得的數據更新100%與我產生,使用沒有值在DB該記錄值?

+0

是'record'一個新的對象或對象已在數據庫中,但你改變的屬性? – Bazzz 2012-04-20 15:00:50

+0

這是通過a = new xosPodOptimizedSearches()在代碼中實例化的新記錄;那麼調用 – KallDrexx 2012-04-20 15:02:10

+0

不應該'context.SubmitChanges()'足以讓它在分配給'person.xosPodOptimizedSearch'之後進入數據庫嗎? http://msdn.microsoft.com/en-us/library/bb292162.aspx – Bazzz 2012-04-20 15:05:09

回答

0

沒關係,這是我的錯誤。我很困惑Linq-to-sql,因爲之前在我的代碼中我有一個流浪的record.xosPerson = person;調用,所以它只認爲人員記錄與新記錄相關聯,並忘記了舊的存在。

相關問題