エンティティを EF5 との三項関係にマップする最良の方法は何ですか?
たとえば、次の 3 つのエンティティがあります。
Bike
Crash
Person
次に、知っておくべき三項関係があります。
- 事故に遭った人のバイク X
- 自転車 X と Y の間の衝突 X の関係者
- 自転車 B の人物 A が関与した衝突の内容
等
エンティティを作成するにはどうすればよいですか? 三者関係の新しいエンティティを作成する唯一の可能性はありますか?
エンティティを EF5 との三項関係にマップする最良の方法は何ですか?
たとえば、次の 3 つのエンティティがあります。
Bike
Crash
Person
次に、知っておくべき三項関係があります。
等
エンティティを作成するにはどうすればよいですか? 三者関係の新しいエンティティを作成する唯一の可能性はありますか?
オプション1
Person-Bike
esなしで存在できる組み合わせがあるとしますCrash
(神に感謝します)。PersonBike
そのため、バイクが特定の人物によって所有されていないと仮定して、人物とバイクに対する FK を持つバイナリ リレーションシップ (ジャンクション テーブル) を作成できます。EF は、モデルに関連クラスがなくても、この多対多の関係を処理できます。
それから、残念なことに、人と自転車の組み合わせが衝突に巻き込まれる可能性があります. 1回のクラッシュで2つ以上の組み合わせが発生する可能性があります。PersonBikes
基本的には、コレクションを持つことができますCrash
。その場合、モデルには関連付けクラスがまったくありません。Crash
しかし、との間の関連性についてもっと知りたい場合PersonBike
、たとえばクラッシュの有罪者は誰であるかなど、両方の間のジャンクション テーブルが必要です: CrashPersonBike
FK の toCrash
とPersonBike
および関連性を説明する 1 つ以上のフィールド (有罪のはい/いいえなど) を使用します。これには、EF モデルの関連付けクラスが必要です。
オプション 2
Bike には特定の所有者 (人) がいます:コレクションPerson
を持たせますBikes
(テーブル Bike には Person への FK があります)。自転車が人を決定するので、関係する自転車だけでクラッシュを説明するだけで十分です。したがってCrash
、Bikes
コレクション (ここでも、モデルに関連クラスはありません) またはCrashBike
上記の詳細を含む関連クラスを持つことができます。
オプション 3
CrashPersonBike
モデル内の関連付けクラス ( ) を必要とする「真の」三項関係。追加の詳細の有無にかかわらず。
どのような場合でも、同じ人物 (オプション 1 と 3 の自転車) が 1 つの衝突に巻き込まれないようにするためのビジネス ロジックが必要です。オプション 1 と 2 には、モデルが衝突以外に人と自転車の組み合わせを記述できるという追加の利点があります。1 か 2 かは、自転車の所有者によって異なります。