0

RIA で動作するプレゼンテーション モデル (ここここで説明) を取得しようとしています。私が見つけることができるすべての例は、1対多または多対多の関係を持たない単純でフラットなデータエンティティです。これは、具体的には、連想関係への更新と挿入では機能しません。

正常に動作するクエリ - プレゼンテーション クラスを Association 属性 (および必要に応じて Include 属性) でマークアップしており、データがクライアント側にどのように読み込まれ、そこでエンティティとして保持されるかについて十分に理解しています。また、カバーされた新しいエンティティの挿入もあります。ただし、次の問題が発生しています。次の例では、単純な Album エンティティと Artist エンティティがあると仮定します。ここで、Album には 1 人のアーティストが含まれ、Artist にはゼロから多数のアルバムが含まれる場合があります。どちらにも Name プロパティがあります。

  • クライアント側では、myArtist.Albums.Add(anAlbum) または myArtist.Albums.Remove(anAlbum) を実行しても何も起こりません。HasChanges は false を返します。( myArtist と anAlbum は、エンティティをロードし、特定のエンティティへの参照を取得するために反復することによって、コードでのみ取得されたことに注意してください: UI や DomainDataSources ではまだ何もしていません。
  • アーティストと SubmitChanges で Name を更新すると、Update メソッドがサーバーで呼び出されると、Albums コレクションが null になります。

誰か提案がありますか、またはより複雑なオブジェクトを使用する例を教えてもらえますか?

EDIT(後世のために上記を保持):子エンティティが変更済みとしてマークされていないため、2番目の問題(Updateがサーバーで呼び出されたときにnullとして表示されるエンティティまたはエンティティのコレクションへの参照)が存在するようですそのため、シリアル化されて送り返されていません。[Composition] を使用してそれを強制できることは知っていますが、そのように動作するようになりましたが、これは合成関係ではなく、両方のエンティティを「トップレベル」エンティティにしたいと考えています。エンティティを変更済みとしてマークするにはどうすればよいですか?

4

1 に答える 1

1

問題は、私の [Association] 属性が正しく定義されていなかったことです。関連付けの Name プロパティが関連付けの両側で同じでなければならないことに気付きませんでした。名前が同じでビルドを実行すると、クライアントで生成されたコードは、「親」が「子」を参照するために使用する EntityCollection に対して、関連付けが正しく設定されていない場合とは異なるコンストラクターを使用します。 . 新しいコンストラクターは、コレクションで Add と Remove を呼び出すときに少し余分な処理を行うコールバックを受け取ります。具体的には、追加または削除する子エンティティを受け取り、その親を参照するプロパティを変更して、すべてが残るようにします。同期: オブジェクトを削除したコレクション、追加したコレクション、およびオブジェクト'

于 2010-01-30T00:16:14.190 に答える