複合主キーを持つエンティティに対して WCF Data Services を使用すると問題が発生します。Silverlight 4 ビジネス アプリケーション テンプレートを使用しており、関連するテーブルのデータベースに対してエンティティ データ モデル (EDM) を作成し、Web プロジェクトでこの EDM 用の WCF データ サービスを作成しました。Silverlight プロジェクトには、WCF データ サービスへのサービス参照があります。これまでのところすべてのかなり標準的なもの:)
簡潔さとデバッグの容易さのために、これを次のような非常に単純なシナリオに絞り込みました。
Lookup
テーブルには列Id
とがありますData
。Lookup2
テーブルには列Id
とがありますData
。MyData
テーブルには、列、、、およびLookupId
があります。Lookup2Id
SomeDate
ExtraData
LookupId
table への外部キーLookup
です。Lookup2Id
table への外部キーLookup2
です。- 列
LookupId
、Lookup2Id
、およびSomeDate
は、テーブル の主キーを形成しますMyData
。
CollectionViewService
次に、個別の を使用して、ルックアップ テーブルから個別の にデータをロードできますDataServiceCollection
。CollectionViewSource
また、メイン データを3 番目の を介して別のデータにロードしますDataServiceCollection
。コントロールのItemsSource
プロパティについては、関連する にバインドしてから、そのプロパティを関連するナビゲーション プロパティにバインドします。これまでのところ、これはすべて正常に機能します。ComboBox
CollectionViewSource
SelectedItem
次に、を呼び出すハンドラーを含む [変更を保存] ボタンを追加します。フィールドの値を変更して[変更を保存] をクリックすると、変更は問題なく保存されます。ただし、ナビゲーション プロパティのいずれかの値を変更すると、次の呼び出し時に例外が発生します。Click
BeginSaveChanges
ExtraData
BeginSaveChanges
リクエスト ストリームの処理中にエラーが発生しました。プロパティ 'Lookup' の値を設定中にエラーが発生しました。値が正しいことを確認してください。
外部キーが複合キーの一部にならないように EDM をさらに単純化すると、変更を正常に保存できますが、実際のアプリケーションの複合キーはデータ モデルの重要な部分です。
私が間違っていることと、複合キーの一部を形成するナビゲーション プロパティを変更する方法について何か提案はありますか?
ありがとう、デレク。