2016-05-19 9 views
0

私はEF6コードこのような最初のモデルデザインを持っています。 Anotherクラスから親(ParentAまたはParentB)を知る最も良い方法は何ですか。ありがとうございます!EF複数の小鳥のための1人の子供

public class Child 
{ 
    public int Id { get; set; } 
    public List<Another> AnotherList { get; set; } 
} 

public class Another 
{ 
    public int Id { get; set; } 
    public int ChildId { get; set; } 
    public Child Child { get; set; } 
    public string AnotherName { get; set; } 
} 

public class ParentA 
{ 
    public int Id { get; set; } 
    public int ChildId { get; set; } 
    public Child Child { get; set; } 
} 

public class ParentB 
{ 
    public int Id { get; set; } 
    public int ChildId { get; set; } 
    public Child Child { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<ParentA> ParentA { get; set; } 
    public DbSet<ParentB> ParentB { get; set; } 
    public DbSet<Child> Child { get; set; } 
    public DbSet<Another> Another { get; set; } 
} 
+0

'Child'は' ParentA'と 'ParentB'プロパティを必要とし、これを2つの1:1関連に変換します。私は代案を多相協会といいますが、それが絶対必要でない場合はそうしません。 –

答えて

0

上記の設定では、EFは親と子の間に1対多の関係を設定します。ただし、同じ子がParentAとParentBによって参照される場合は、多対多として設定することをお勧めします。あなたはEFのドキュメントでそれを行う方法を見つけることができます:

context.ParentAs.Where(p => p.ChildId == id).Any() 

これはあなたを教えてくれます:http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

の子を参照する人を見つける方法についての質問については、次のような単純なクエリを定式化することができますあなたの子供を参照するParentAがあるかどうか。

あなたはそれがよりエレガントにしたい場合は、あなたがお互いに両親関連付けることができます:

class Parent{ /* ... */ } 
class ParentA : Parent{ /* ... */ } 
class ParentB : Parent { /* ... */ } 

をそして子供ではなく、他の方法で回避から親を参照します。

class Child 
{ 
    public Parent Parent{ get; set; } 
    // ... 
} 
+0

あなたの返信ありがとう、Roland。問題は、ParentAとParentBが別のクラス(例えばParentA:Class1、ParentB:Class2など)から既に継承されていることです。 – loqie

+0

OK。それでもサブクエリを使用できますが、ドメインモデルに対応するプロパティを持つことは難しいでしょう。 – Roland

関連する問題