开发者

How Do You Update a Navigation Property for an Entity With a Composite Key?

I'm having a problem using WCF Data Services for an entity that has a composite primary key. I'm using the Silverlight 4 Business Application Template and have created an Entity Data Model (EDM) against the database for the relevant tables and created a WCF Data Service for this EDM in the web project. The Silverlight project has a Service Reference to the WCF Data Service. All fairly standard stuff so far :)

For the sake of simplicity and ease of debugging, I've narrowed this down to a very simple scenario as follows:

  • Lookup table has columns Id and Data.
  • Lookup2 table has columns Id and Data.
  • MyData table has columns LookupId, Lookup2Id, SomeDate, and ExtraData.
    • LookupId is a foreign key to table Lookup.
    • Lookup2Id is a foreign key to table Lookup2.
    • Columns LookupId, Lookup2Id, and SomeDate form the primary key for table MyData.
  • 开发者_运维问答

I can then load the data from the lookup tables into separate CollectionViewServices by using separate DataServiceCollections. I also load the main data into another CollectionViewSource via a third DataServiceCollection. For the ItemsSource property in the ComboBox controls, I bind to the relevant CollectionViewSource, and then bind the SelectedItem property to the relevant navigation property. This all works fine so far.

I then add a Save Changes button with a Click handler that calls BeginSaveChanges. If I change the value of the ExtraData field, and then click Save Changes the changes are saved without any problems. However, if I change the value of one of the navigation properties I get an exception when BeginSaveChanges is called:

Error processing request stream. Error encountered in setting value for property 'Lookup'. Please verify that the value is correct.

If I simplify the EDM further so that the foreign key is not part of the composite key, then changes can be saved successfully, however, the composite key in the actual application is an important part of the data model.

Any suggestions on what I'm doing wrong and how to change a navigation property that forms part of a composite key?

Thanks, Derek.


Changing the key property of an entity is not possible in OData. The main reason is that it would change the identity of the entity, but the entire system assumes that identity never changes. From the point of view of OData changing identity is the same as deleting an existing property and adding a new (different) one. It would also mean that the URL of the entity changes, which would not play nice with clients. Without the model I don't know why it fails the way it does for you, but WCF Data Services won't allow you to change the key property directly anyway.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜