2010-11-19 53 views
0

這是我的場景:Silverlight&RIA&POCO:SubmitOperation當插入兩個新的子實體時失敗。一個具有相同ID的實體

我正在使用Silverlight,RIA和POCO對象(沒有實體框架;我們正在對付Oracle和SP)。

我有一個Parent對象,它包含一個Child對象的集合。我已經正確設置了Parent上的Association和Composition屬性。當我想保存更改時,整個對象圖都會正確發送到服務器。

用戶可以將一個或多個子對象添加到父級。

現在,如果用戶向Parent添加一個Child對象並保存它,那麼一切正常。但是,當用戶試圖將兩個或更多的新對象添加到父,然後堅持下去,我得到了經典的錯誤:

System.ServiceModel.DomainServices.Client.DomainOperationException: Submit operation failed. An entity with the same identity already exists in this EntitySet. ---> System.InvalidOperationException: An entity with the same identity already exists in this EntitySet.

現在,這是失敗的客戶端上。我正在追蹤一切 - 數據庫實際上得到更新!一切都會正確發送到服務器,數據庫會被更新。當重新查詢發生時,我檢查服務器上的對象鍵,它們是正確的 - 所有新的子對象都按順序從零更新爲實數。

這是當我得到重新加載客戶端上的父對象,我得到這個錯誤。我不明白。我正在爲重新加載操作創建一個新的上下文;它應該是空的,只需加載Parent和關聯的子項。我在查詢方法結束之前檢查服務器端的數據 - 父數據和子數據沒有問題。那麼發生了什麼?爲什麼我的上下文喋喋不休,無法完成這個SubmitOperation?

+0

我想通了。基本上,你必須停止嘗試手動做事,讓RIA爲你做。 – 2011-01-10 20:44:55

回答

1

你放棄了太簡單 - 不要讓RIA爲你做! :-)

這裏是這筆交易......

既然你與POCO對象(無EF),你最有可能有一個標識屬性([關鍵])在你的屬性之一指定工作它的關鍵(或身份)。

嗯......

當您添加連續2個對象,你將最有可能違約的關鍵0。這一個值的值域服務&上下文中的問題,因爲它試圖管理爲你設置。那麼,如果在將對象保存到數據庫之後,您沒有更新密鑰,它們將保持值爲0.

問題!

域服務&上下文嘗試將這兩個對象置於其託管的EntitySet中,因此,所有對象都必須是唯一的。

所以......

長期和短期的它...它保存到數據庫後,更新您的鍵值。

+0

是耶利米,這就是我想到的。它是「讓Ria爲你做」的一部分 - 只有你必須提供密鑰才能管理變更集。儘管學習RIA很酷。我真的很喜歡它:-)謝謝! – 2011-04-28 04:23:04

相關問題