繁体   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