2

ビジネス ケース: 契約のリストを含むメッセージが送信され、メッセージはデータベースに保存される必要があります。コントラクトは複数のメッセージに属することができ、レポートは特定のコントラクトに関連するメッセージを表示できますが、これは私のコードには関係ありません。私のコードは、一度に 1 つのメッセージを格納するだけで済みます。

Message、Contract、および ContractMessage の 3 つのテーブルがあります。スキーマ ファースト (データベース ファースト) アプローチを使用すると、ContractMessage エンティティが作成されます。そのエンティティは必要ありません。メッセージ内の List< Contract> タイプのプロパティのみが必要です。そして現在、コントラクト内に List< Message> を含めることにも興味がありません。

EF初心者ですが、EF1はトラブルだらけと聞きます。ブリッジテーブルを保持する必要がありますか? ブリッジ テーブルを削除してプロパティに変換できます。モデルからこれらのブリッジ テーブルを削除する方法と、マッピングを修正する方法。

4

2 に答える 2

0

Entity Framework がブリッジ テーブルをデータベース ファースト アプローチのエンティティとして作成する場合、通常は、多対多リレーションシップのブリッジ テーブルとして認識されるために必要なスキーマがブリッジ テーブルにないことを意味します。つまり、次のようになります。

  • ブリッジ テーブルには正確 (number of primary key columns in left entity) + (number of primary key columns in right entity)な列が必要です。例: 左右のエンティティ テーブル (ContractおよびMessage) に複合キーがなく、主キー列が 1 つしかない場合、ブリッジ テーブルの列数は正確に 2でなければなりません。

  • ブリッジ テーブルのすべての列は、単一の複合主キーを形成する必要があります。

  • 左側のエンティティ テーブルの主キーとブリッジ テーブルの最初の列の間に、外部キー制約をデータベースで定義する必要があります。つまり、ブリッジ テーブルの最初の列は外部キーです。左側のエンティティ テーブルに。

  • 同じことが右側のエンティティ テーブルとブリッジ テーブルの最後の列にも当てはまります。

  • この点についてはよくわかりませんが (特に EF 1 の場合はそうではありません)、上記の 2 つの外部キー関係でカスケード削除を有効にする必要がある場合があります。

これらのルールが満たされている場合、ブリッジ テーブルはエンティティとして作成されません。これは、EF 1 を含む Entity Framework のすべてのバージョンに適用されます。

これらの要件のいずれかが満たされていない場合、EF は多対多の関係を検出せず、ブリッジ テーブルをエンティティとして作成しません。

満たされていない要件の詳細にもよるかもしれませんが、一般的には、EF モデルを変更して、それに応じてデータベース スキーマを変更せずに機能する多対多の関係を定義することはできないと思います。たとえば、ブリッジ テーブルに別の主キー列がある場合 (左エンティティと右エンティティへの FK に加えて)、おそらくブリッジ エンティティをモデルに保持する必要があります。

最善の解決策は、上記のルールを満たすようにデータベース スキーマを調整することです (変更できる場合)。

于 2013-07-14T13:45:13.227 に答える