web-dev-qa-db-ja.com

MapKeyとHasForeignKeyの違い-Fluent API

実際の違いは何ですか:

this.HasRequired(a => a.Something)
    .WithMany()
    .Map(a => a.MapKey("SomethingId"));

そして

this.HasRequired(a => a.Something)
    .WithMany()
    .HasForeignKey(a => a.SomethingId);
53
parliament

両方のマッピングは、nullできない外部キーSomethingIdと2つの関連するテーブル間の参照制約を使用して、まったく同じデータベーススキーマを作成します。

MapKeyを使用した最初のマッピングは、モデルクラスのプロパティとして外部キーを持ちたくない場合に使用されます。この場合の関連付けのタイプはIndependent Associationと呼ばれます。外部キーがモデルのプロパティである場合、HasForeignKeyを使用して2番目のマッピングを適用します。このタイプはForeign Key Associationと呼ばれます。

多くのシナリオでは、外部キーアソシエーションを使用する方が簡単ですが、多くの人は、オブジェクトの世界にリレーショナルアーティファクト(外部キー)があるため、独立したアソシエーションを好む方がクリーンではないと考えています。

2種類の関連付けとその長所と短所に関するいくつかの参照を以下に示します。

82
Slauma