1

データベース内の 2 つのテーブル間に多対多の関係があるため、edmx モデルには 2 つのテーブルしかなく、中間テーブルはありません。このテーブルは映画とジャンルです。

いくつかの映画を検索すると、関連するエンティティも取得されるため、イーガー ロードを使用してエンティティ映画のコレクション Genres を設定します。私が欲しいものです。

問題は、結果に複数の映画がある場合、エンティティ MOvies のコレクション Genres が入力されるだけでなく、エンティティ Genres のコレクション Movies も入力されることです。したがって、更新する 1 つの映画をリポジトリに送信するときに、エンティティをコンテキストに添付すると、この映画と、更新する映画と同じジャンルのすべての映画を添付します。これは、エンティティのジャンルに、更新したい映画と同じジャンルの映画が含まれているためです。

したがって、最初の検索で大量の映画を取得した場合、1 つの映画を更新したいときに、シードする必要のないエンティティを多数送信するため、ネットワーク内で大量のトラフィックが発生します。

結果を検索するときに、ジャンル エンティティの映画のコレクションが入力されないようにする方法はありますか? すべてではなく、メイン エンティティである映画の関連エンティティのみを入力するためです。

私は SQLite と EF 4.4 を使用しています。ジャンルの追跡を無効にするmergeOptionを見つけようとしましたが、見つかりません。

ありがとう。

4

1 に答える 1

1

エンティティと関係を設計する (論理設計) 場合、2 つのエンティティ間の多対多の関係を記述することができます。これらのエンティティとその関係をデータベース (物理設計) に実装する必要がある場合、2 つのテーブルだけでは実行できません。関係を表現するには、中間テーブルが本当に必要です。

2 つのエンティティ間の 1 対多の関係では、エンティティごとに 1 つのテーブルのみが必要です (単純な外部キー関係)。したがって、ジャンル テーブルが特定の映画のジャンルの単なるリストである場合、それは 1 対多 (親としての映画、子としてのジャンル) になります。それはうまくいくでしょう。

ただし、ジャンルは映画と多対多の関係にあると説明したため、一種の「選択リスト」を提供するためにジャンルを使用することをお勧めします。つまり、ジャンルの1つの行は特定の行に関連していません映画では、しかし、任意の映画に関連している可能性があります (逆も同様です)。この関係を機能させるには、中間テーブルが必要です。これを「moviegenres」と呼びましょう。このテーブルには、映画の主キーに関連する外部キーと、ジャンルの主キーに関連する外部キーの 2 つの列のみが含まれている必要があります。このテーブルは、実際には多対多の関係を表しており、映画へのジャンルの割り当ては、「moviegenres」に行を追加することによって行われます。

データの入力方法に関する問題を検討する前に、まず論理から物理への設計の問題を解決する必要があります。

于 2013-06-18T17:45:29.740 に答える