2016-05-19 7 views
0

Ich habe EF6 Code Erste Modell-Design wie folgt. Was ist der beste Weg zu wissen, wer ein Elternteil ist (ParentA oder ParentB) von Another class.Thank!EF Ein Kind für Multiply Parrents

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' benötigt eine 'ParentA'- und eine' ParentB'-Eigenschaft und wandelt diese in zwei 1: 1-Zuordnungen um. I Die Alternative wird polymorphe Assoziationen genannt, aber ich würde das nicht tun, wenn es nicht unbedingt notwendig ist. –

Antwort

0

In der oben beschriebenen Konfiguration wird EF Eins-zu-viele-Beziehungen zwischen Eltern und Kindern herstellen. Wenn das gleiche untergeordnete Objekt jedoch von ParentA und ParentB referenziert werden kann, möchten Sie es möglicherweise als number-to-many konfigurieren. Sie können erfahren, wie es in der EF-Dokumentation zu tun: http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

In Bezug auf die Frage, wie man herausfinden, wer das Kind verweist, können Sie eine einfache Abfrage wie formulieren:

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

Dies wird Ihnen sagen, Gibt es ein ParentA, das auf Ihr Kind verweist?

Wenn Sie haben wollen, es eleganter, können Sie die beiden Eltern miteinander in Zusammenhang stehen könnten:

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

Und verweisen dann die Eltern vom Kind eher als umgekehrt:

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

Danke für deine Antwort, Roland. Das Problem besteht darin, dass ParentA und ParentB bereits von anderen Klassen geerbt wurden, z. B. ParentA: Class1, ParentB: Class2. – loqie

+0

OK. Dann können Sie immer noch eine Unterabfrage verwenden, aber es wird schwierig sein, eine entsprechende Eigenschaft in Ihrem Domänenmodell zu haben .... – Roland