[解決済み] Code First: 独立した関連付けと外部キーの関連付け?
質問
新しいプロジェクトに着手し、POCO を設計するたびに、自分自身と心の中で議論しています。私は、多くのチュートリアルやコード サンプルを見てきましたが、これらのチュートリアルでは 外部キーの関連付け :
外部キーの関連付け
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
とは対照的に 独立した協会 :
独立した協会
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
私は過去にNHibernateで作業し、独立した関連付けを使用しました。これはよりOOに感じられるだけでなく、(遅延ロードにより)IDだけでなく、顧客オブジェクト全体にアクセスできるという利点があります。これにより、例えばOrderのインスタンスを取得して
Order.Customer.FirstName
を実行することができ、非常に便利です。
というわけで、要約すると、私の質問は
- 独立した関連付けを使用することに、重大な欠点はありますか。 独立したアソシエーションを使用することに大きな欠点はありますか? そして
- もし何もないのであれば、外部キーの関連付けを使用する理由は何でしょうか? は外部キーの関連付けを使用する理由となりますか?
どのように解決するのですか?
ORMをフルに活用したいのであれば、間違いなくEntity referenceを使うでしょう。
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
FKを持つデータベースからエンティティモデルを生成すると、常にエンティティ参照が生成されます。もしそれらを使用したくない場合は、手動でEDMXファイルを修正し、FKを表すプロパティを追加する必要があります。少なくとも、これは独立した関連付けのみが許可されていたEntity Framework v1の場合でした。
Entity Framework v4 は、外部キー関連付けと呼ばれる新しいタイプの関連付けを提供します。独立キーと外部キーの関連付けの最も明白な違いは、順序クラスです。
public class Order
{
public int ID { get; set; }
public int CustomerId { get; set; } // <-- Customer ID
public Customer Customer { get; set; } // <-- Customer object
...
}
ご覧のように、FKプロパティとエンティティリファレンスの両方があります。2つのタイプの関連付けの間には、さらに多くの違いがあります。
独立した関連付け
-
で独立したオブジェクトとして表現されます。
ObjectStateManager
. これは独自のEntityState
! - アソシエーションを構築する場合、常にアソシエーションの両端からのエンタイトルメントが必要です。
- このアソシエーションは、エンティティと同じ方法でマッピングされます。
外部キーの関連付け
-
の中で別のオブジェクトとして表現されることはありません。
ObjectStateManager
. そのため、いくつかの特別なルールに従わなければなりません。 - 関連付けを行う場合、関連付けの両端は必要ではありません。子エンティティと親エンティティのPKがあれば十分ですが、PKの値は一意でなければなりません。したがって、外部キーの関連付けを使用する場合は、リレーションで使用される新しく生成されたエンティティに一時的な一意のIDを割り当てる必要があります。
- この関連付けはマッピングされませんが、その代わりに参照制約を定義します。
外部キーの関連付けを使用する場合、以下の項目をチェックする必要があります。 モデル内に外部キーカラムを含む をチェックする必要があります。
編集してください。
この2種類の関連付けの違いはあまり知られていないことが分かりましたので 短い記事を書きました。 を書きました。
関連
-
[解決済み] コードファーストとモデル・データベースファーストの比較【終了しました
-
[解決済み】Entity Frameworkで複数のカラムにユニークキー制約を設定する
-
[解決済み] Entity Framework Code Firstでオブジェクトをデタッチするにはどうすればいいですか?
-
[解決済み] Entity Framework - やり直し - すべての移行を元に戻す/ロールバックする
-
[解決済み] Entity Framework 4 / POCO - 何から始めるか?[クローズド]
-
[解決済み] Entity Frameworkのバージョンは?
-
[解決済み] Entity Framework Code First - Fluent ApiとData Annotationsのメリット・デメリット【終了しました
-
[解決済み] Entity Frameworkの接続文字列はどのように編集すればよいですか?
-
[解決済み] Entity Framework 6.2でインデックスを作成する方法とそのコード
-
[解決済み] Entityフレームワークのバルクインサートのパフォーマンス向上【重複あり
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Entity Framework - エラー 11007。エンティティタイプはマッピングされていません。
-
[解決済み] EFのマイグレーション。最後に適用したマイグレーションをロールバックしますか?
-
[解決済み】Entity Framework。1つのデータベース、複数のDbContexts。これは悪い考えなのか?[クローズド]。
-
[解決済み】.ToList(), .AsEnumerable(), AsQueryable()の違いは何ですか?
-
[解決済み】Entity Frameworkで複数のカラムにユニークキー制約を設定する
-
[解決済み] Entity Framework - やり直し - すべての移行を元に戻す/ロールバックする
-
[解決済み] Entity FrameworkとSQL Server View
-
[解決済み] 特定のVSプロジェクトでのみパッケージマネージャーコンソールのマイグレーションを有効にするCommandNotFoundExceptionを発生させる
-
[解決済み] Entity Framework Code First - Fluent ApiとData Annotationsのメリット・デメリット【終了しました
-
[解決済み] Entityフレームワークのバルクインサートのパフォーマンス向上【重複あり