我有RIA服务和nHibernate的组合。 nHibernate配置为在数据库端使用标识。所以新的实体与id一起发送0。 nHibernate可以正常工作。它从数据库更新生成的密钥并更新entites。
我有组合层次结构的例子。我的实体很复杂,它有两个集合。
InvestObject
- MaterialItems
- WorkItems
我在一个工作单元中使用这个结构。在Silverlight应用程序中获取和显示数据是没有问题的。但是如果我尝试在客户端的MaterialItems集合中添加多个项目,保存时我会收到此错误:
提交操作失败。无效 ChangeSet:给定的只有一个条目 实体实例可以存在于 变更。在 System.ServiceModel.DomainServices.Server.ChangeSet.ValidateChangeSetEntries(IEnumerable的
1 changeSetEntries) at System.ServiceModel.DomainServices.Server.ChangeSet..ctor(IEnumerable
1 changeSetEntries)
客户端有一个快速修复,只是为了为Material生成一些虚拟负id。这适用于RIA,并且保存传播到服务器端。但是,然后nHibernate会触发错误,因为它对于所有新ID而言期望为0而不是给定值()。所以这不行。
最后,我通过将所有新ID重新设置为0来欺骗nHibernate。但这并不能让我高兴。这是一个混乱丑陋的解决方案。
请帮忙
答案 0 :(得分:0)
我已经有一段时间了,所以细节很模糊,但我认为你基本上不能使用在RIA服务的数据库中生成的ID。我们使用的是HiLo算法。