0
class Profile { string name; Book[] books} 

class Book { string name }

2つの別々のプロファイル(AとB)は、どちらも同じ本に関連しています。

WCF/RIAを使用してSilverlightからプロファイルを1つずつロードする場合。私は同じ名前の2冊の本のオブジェクトになってしまいます。(同じ本!)。RIAに、本がすでにSilverlightに存在していることを検出し、2回目に作成するのではなく、既存のインスタンスを使用するようにします。

それらはPOCO(複雑なオブジェクト-DBにはありません)です。

名前が一意であり、Silverlight(RIAクライアント側)に同じ名前のインスタンスが2つ存在することはできないことをRIAに伝えるにはどうすればよいですか?

更新私は回避策を実装したと尋ねて以来、私はそれがエレガントな解決策だとは思っていません!しかし、ここにあります。GetProfileのコールバックメソッドは、すべてのprofile.booksをトラバースし、各ブックがローカルディクショナリにすでに存在するかどうかを確認するメソッドに置き換えられます。ブックがローカルに存在する場合、ローカルブックが使用され、2番目のインスタンスが削除されます。そうでない場合、本は辞書に追加されて使用されます。

解決策独自のブッククラスのクライアントサイドを作成してから、RIAで作成したブックを独自のブックタイプに変換します。更新されたブックをサーバーに送り返すとき、RIAブックのインスタンスを作成し、プロパティを更新する前に、後でOnDeserializing()とOnDesriallized()を呼び出します。これにより、RIA-Bookを編集できます。

4

1 に答える 1

0

解決策 GetProfile のコールバック メソッドは、すべての profile.books をトラバースし、各ブックがローカル辞書に既に存在するかどうかを確認するメソッドに置き換えられます。ブックがローカルに存在する場合、ローカル ブックが使用され、2 番目のインスタンスが削除されます。そうでない場合、本は辞書に追加されて使用されます。

独自の Book クラス クライアントサイドを作成し、RIA で作成したブックを独自のブック タイプに変換します。更新した本をサーバーに送り返すときは、RIA ブックのインスタンスを作成し、プロパティ (FavouriteBook など) を更新する前に、OnDeserializing() と OnDesriallized() を呼び出します。これにより、RIA-Book を編集できるようになります。

于 2012-04-25T13:54:16.977 に答える