重複の可能性:
コードファースト:独立した関連付けと外部キーの関連付け?
EF4またはEF5コードファーストでは、 MSDN または 外部キーと独立関係で使用される「独立した関連付け」とは何であり、「外部キーの関連付け」とは何ですか。 ? - Entity Frameworkの5 (強調追加)とが改善です。
2.4.1ビュー生成コストを削減するための外部キーアソシエーションの使用
モデル内の関連付けを独立した関連付けから外部キーの関連付けに切り替えると、ビューの生成に費やされる時間が劇的に改善されるケースが数多く見られます。
だから-今私はどちらを使うべきかを知っています。それらが何であるか、そしてどのようにそれに変換するかを私が知っていれば!では、私の質問は、これらの用語をどのように定義するのかということです。どのような流暢/注釈/慣習がそれぞれを呼び出しますか?
外部キーの関連付けは、対応するナビゲーションプロパティに加えて、モデルに外部キープロパティがある場所です。独立した関連付けとは、データベースに外部キー列があるが、この列に対応する外部キープロパティがモデルにない場合です。つまり、NavigationPropertyはありますが、のID値を示す外部キープロパティがありません。関連プロパティは、実際には関連プロパティに移動しません。
独立した関連付けを持つモデルの例を次に示します(依存関係には外部キーがなく、ナビゲーションプロパティのみがあることに注意してください)。
public class Dependent
{
public int Id { get; set; }
[Required]
public Principal PrincipalEntity { get; set; }
}
public class Principal
{
public int Id { get; set; }
public ICollection<Dependent> DependentEntities { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Dependent> Dependents { get; set; }
public DbSet<Principal> Principals { get; set; }
}
これは同じモデルの例ですが、ForeignKey Associationがあります(PrincipalEntity_Idプロパティと[ForeignKey()]属性に注意してください)。
public class Dependent
{
public int Id { get; set; }
public int PrincipalEntity_Id { get; set; }
[Required]
[ForeignKey("PrincipalEntity_Id")]
public Principal PrincipalEntity { get; set; }
}
public class Principal
{
public int Id { get; set; }
public ICollection<Dependent> DependentEntities { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Dependent> Dependents { get; set; }
public DbSet<Principal> Principals { get; set; }
}
データベースは変更されないことに注意してください。基になるデータベースには常に外部キーの列がありますが、独立した関連付けでは公開されませんでした。
外部キーの関連付けを使用すると、外部キーの値を変更するだけで関係を更新できます。これは、ナビゲーションプロパティを更新するエンティティをロードする必要がないため、値がわかっている場合に便利です。
独立キーまたは外部キーの関連付けを使用する理由についての私の意見:
長所:
短所:
EntityObject
の接尾辞が付いた別のプロパティとペアになっていて、関係に関する追加の詳細を提供する、重いReference
ベースエンティティでは問題ではありませんでした。Modified
状態になることはありません。すべての変更は常に、古いリレーションを削除済みとして設定し、新しいリレーションを追加済みとして作成することで構成されます。これは、使用しようとすると本当に混乱します。長所:
短所:
1対1は常に外部キーの関連付けであり、多対多は常に独立した関連付けであるため、この違いは1対多の関連付けにのみ重要です。