簡體   English   中英

Silverlight&RIA&POCO:插入兩個新的子實體時,SubmitOperationFailed。 存在具有相同ID的實體

[英]Silverlight & RIA & POCO: SubmitOperationFailed when INSERTING two new child entities. An entity with the same ID exists

這是我的情況:

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

我有一個Parent對象,其中包含Child對象的集合。 我已經在父級上正確設置了關聯和組成屬性。 當我要保存更改時,整個對象圖將正確發送到服務器。

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

現在,如果用戶將一個子對象添加到父對象並保存,則一切正常。 但是,當用戶嘗試將兩個或兩個以上新對象添加到“父對象”然后繼續存在時,出現經典錯誤:

System.ServiceModel.DomainServices.Client.DomainOperationException:提交操作失敗。 具有相同標識的實體已存在於此EntitySet中。 ---> System.InvalidOperationException:具有相同標識的實體已存在於此EntitySet中。

現在,這在客戶端上失敗了。 我正在跟蹤所有內容-數據庫實際上已更新! 一切都正確地發送到服務器,數據庫得到更新。 我在重新查詢發生時檢查服務器上的對象鍵,它們正確無誤-所有新的子對象都按順序將其ID的值從零更新為實數。

這是我在客戶端上重新加載Parent對象時遇到的錯誤。 我不明白 我正在重新加載操作上新建一個Context; 它應該為空,僅加載父級和關聯的子級。 我先在服務器端檢查數據,然后再使用查詢方法-父級和子級數據都可以。 那是怎么回事? 為什么我的上下文對無法完成此SubmitOperation感到困惑?

您放棄太容易了-不要讓RIA為您做!! :-)

這是交易...

由於您正在使用POCO對象(無EF),因此您很可能在其屬性之一上具有標識屬性([Key]),以指定該對象的鍵(或標識)。

好...

當您添加2個連續對象時,您很可能會將密鑰的默認值默認為0。這對於域服務和上下文是一個問題,因為它會嘗試為您管理集合。 好吧,如果在將對象保存到數據庫之后,您尚未更新密鑰,則它們都將保留為0。

問題!

域服務和上下文嘗試將這兩個對象放入其托管EntitySet中,因此,所有對象都必須是唯一的。

所以...

多頭和空頭是...將鍵值保存到數據庫后更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM