3

基本的に私が達成しようとしているのは、3つのテーブルがあり、1つの親には常にエントリがあり、他の2つのテーブルのうち1つだけが入力されます。私が扱っている複雑さは、テーブルの主キーが2つのフィールドの組み合わせであるということです

ParentTable
-----------
UniqueID
OwnerID
[Some more fields]


ChildTable1
-----------
UniqueID
OwnerID
[Some more fields]


ChildTable2
-----------
UniqueID
OwnerID
[Some more fields]

EF Code Firstを使用して、できればFluent APIを使用してこれを行うための最善の方法について、誰かが何か提案があるかどうか疑問に思いました。

4

1 に答える 1

7

主キーが複合であることを定義する必要があるだけです...

modelBuilder.Entity<Parent>().HasKey(p => new { p.UniqueID, p.OwnerID });
modelBuilder.Entity<Child1>().HasKey(c => new { c.UniqueID, c.OwnerID });
modelBuilder.Entity<Child2>().HasKey(c => new { c.UniqueID, c.OwnerID });

...そして、2 つの 1 対 1 の関係を定義します。

modelBuilder.Entity<Parent>()
    .HasOptional(p => p.Child1)
    .WithRequired(); // or .WithRequired(c => c.Parent)

modelBuilder.Entity<Parent>()
    .HasOptional(p => p.Child2)
    .WithRequired(); // or .WithRequired(c => c.Parent)

ただし、特定の親が 2 つの子の一方のみを参照し、両方を参照できないようにする制約を定義することはできません (データベースでトリガーを定義する場合を除く)。アプリケーションのビジネス ロジックでこの制限を処理する必要があります。

于 2012-11-06T15:49:36.980 に答える