4

Entity Framework モデルの関係に関して設計上の問題があります

私はedmxにこのモデルを持っています EFダイアグラム

ビジネス ルール:

AParticipantは複数持つことができるので、 と テーブルに 1 対多の関係を持つRoles関係テーブルを作成します。ParticipantRolesParticipantRole

問題: 参加者の役割の値を取得するには、ドリルダウンする必要がありますParticipant->ParticipantRole->Role (以下の JSON 出力を参照)。

ここに画像の説明を入力

質問:

EF で、ParticipantsRole テーブルをバイパスするテーブル リレーションシップを設計する方法。このような役割にアクセスしたいのですが、Particant.RoleそうではありませんParticipant.ParticipantsRole.Role

4

1 に答える 1

2

AParticipantは複数Roleの sを持つことができると言います。そしてもちろん、 aRoleは複数Participantの s を持つことができます。したがって、基本的にこれは多対多の関連付けです。

Entity Framework は、ジャンクション テーブルに 2 つの外部キーしかない場合、純粋な多対多の関連付け (接続クラスなし) のみをマップします。あなたの場合、テーブルParticipantsRoleに主キーのみが含まれていた場合、モデルの生成時にParticipantIdクラスは作成されませんでした。とをナビゲーション プロパティとして持っていたでしょう。RoleId ParticipantsRoleParticipant.RolesRole.Participants

ただし、モデルは で生成されておりParticipantsRole、それを削除したいと考えています。(またはそうでない場合は、それに戻ります)。

これはあなたができることです:

  • ParticipantRolesクラス図から削除します。
  • データベース テーブルを変更してParticipantRoles、両方が主キーを形成する 2 つの FK 列のみを持つようにします。
  • データベースからモデルを更新し、[ParticipantsRole追加] タブで選択します。

これにより、純粋な多対多の関連付けを持つモデルが得られます。

ただし、これを行う前によく考えてください。M2m アソシエーションには、1-m-1 アソシエーションに進化する方法があります (現在のように)。その理由は、遅かれ早かれ関連付けに関するデータを記録する必要性が感じられるため、ジャンクション テーブルにはより多くのフィールドが必要になり、純粋なジャンクション テーブルではなくなるからです。あなたの場合、ある日の参加者の役割には、固定された順序、またはデフォルトとしてマークされた順序が必要であると想像できます。実稼働環境で m2m アソシエーションを 1-m-1 に変更することは、大幅なオーバーホールになる可能性があります。- 考慮すべき点...

于 2013-11-12T20:57:32.030 に答える