1

複合主キーを持つエンティティに対して WCF Data Services を使用すると問題が発生します。Silverlight 4 ビジネス アプリケーション テンプレートを使用しており、関連するテーブルのデータベースに対してエンティティ データ モデル (EDM) を作成し、Web プロジェクトでこの EDM 用の WCF データ サービスを作成しました。Silverlight プロジェクトには、WCF データ サービスへのサービス参照があります。これまでのところすべてのかなり標準的なもの:)

簡潔さとデバッグの容易さのために、これを次のような非常に単純なシナリオに絞り込みました。

  • Lookupテーブルには列IdとがありますData
  • Lookup2テーブルには列IdとがありますData
  • MyDataテーブルには、列、、、およびLookupIdがあります。 Lookup2IdSomeDateExtraData
    • LookupIdtable への外部キーLookupです。
    • Lookup2Idtable への外部キーLookup2です。
    • LookupIdLookup2Id、およびSomeDateは、テーブル の主キーを形成しますMyData

CollectionViewService次に、個別の を使用して、ルックアップ テーブルから個別の にデータをロードできますDataServiceCollectionCollectionViewSourceまた、メイン データを3 番目の を介して別のデータにロードしますDataServiceCollection。コントロールのItemsSourceプロパティについては、関連する にバインドしてから、そのプロパティを関連するナビゲーション プロパティにバインドします。これまでのところ、これはすべて正常に機能します。ComboBoxCollectionViewSourceSelectedItem

次に、を呼び出すハンドラーを含む [変更を保存] ボタンを追加します。フィールドの値を変更して[変更を保存] をクリックすると、変更は問題なく保存されます。ただし、ナビゲーション プロパティのいずれかの値を変更すると、次の呼び出し時に例外が発生します。ClickBeginSaveChangesExtraDataBeginSaveChanges

リクエスト ストリームの処理中にエラーが発生しました。プロパティ 'Lookup' の値を設定中にエラーが発生しました。値が正しいことを確認してください。

外部キーが複合キーの一部にならないように EDM をさらに単純化すると、変更を正常に保存できますが、実際のアプリケーションの複合キーはデータ モデルの重要な部分です。

私が間違っていることと、複合キーの一部を形成するナビゲーション プロパティを変更する方法について何か提案はありますか?

ありがとう、デレク。

4

1 に答える 1

2

ODataでは、エンティティのキ​​ープロパティを変更することはできません。主な理由は、エンティティのIDが変更されることですが、システム全体ではIDが変更されないと想定しています。ODataの観点からは、IDを変更することは、既存のプロパティを削除して新しい(異なる)プロパティを追加することと同じです。また、エンティティのURLが変更されることを意味し、クライアントとうまく連携しません。モデルがないと、なぜ失敗するのかわかりませんが、WCF Data Servicesでは、キープロパティを直接変更することはできません。

于 2011-08-01T19:57:07.640 に答える