我在为具有复合主键的实体使用 WCF 数据服务时遇到问题。我正在使用 Silverlight 4 业务应用程序模板,并针对相关表的数据库创建了实体数据模型 (EDM),并在 Web 项目中为此 EDM 创建了 WCF 数据服务。Silverlight 项目具有对 WCF 数据服务的服务引用。到目前为止所有相当标准的东西:)
为了简单和易于调试,我将其缩小为一个非常简单的场景,如下所示:
Lookup
表有列Id
和Data
。Lookup2
表有列Id
和Data
。MyData
表有列LookupId
、Lookup2Id
、SomeDate
和ExtraData
。LookupId
是表的外键Lookup
。Lookup2Id
是表的外键Lookup2
。- 列
LookupId
,Lookup2Id
和SomeDate
构成表的主键MyData
。
CollectionViewService
然后,我可以使用单独的 s将查找表中的数据加载到单独的DataServiceCollection
s 中。CollectionViewSource
我还通过第三个将主要数据加载到另一个中DataServiceCollection
。对于控件ItemsSource
中的属性ComboBox
,我先绑定到相关的CollectionViewSource
,然后再将SelectedItem
属性绑定到相关的导航属性。到目前为止,这一切都很好。
然后,我添加一个保存更改按钮,其中包含一个Click
调用BeginSaveChanges
. 如果我更改ExtraData
字段的值,然后单击保存更改,则更改将被保存而不会出现任何问题。但是,如果我更改其中一个导航属性的值,则在BeginSaveChanges
调用时会出现异常:
处理请求流时出错。设置属性“查找”的值时遇到错误。请验证该值是否正确。
如果我进一步简化 EDM,使外键不属于复合键的一部分,则可以成功保存更改,但实际应用中的复合键是数据模型的重要组成部分。
关于我做错了什么以及如何更改构成复合键一部分的导航属性的任何建议?
谢谢,德里克。