Frage

Ich habe eine Basisklasse und zwei Kind (A: Basis und B: Base), und ich möchte sie auf zwei Tabellen zuordnen (Tabelle A und Tabelle B). Ist das in fließendem Nhibernate möglich? Also habe ich:

public class Base
{
    public virtual int Id {get;set;}
    public virtual int IndexIn {get;set;}
    public virtual Product Product {get;set;}
}

public class A : Base
{
    public virtual string Value {get;set;}
}

public class B : Base
{
    public virtual int Value {get;set;}
    public virtual IList<Sequence> Sequences {get;set;}
}

Meine Zuordnung ist:

public class BaseMap : ClassMap<Base>
{
     public BaseMap()
     {
        Id(x => x.Id);
        Map(x => x.IndexIn);
        References(x => x.Product);
     }
}

public class AMap : SubclassMap<A>
{
     public AMap()
     {
         Map(x => x.Value);
     }
}
public class BMap : SubclassMap<B>
{
     public BMap()
     {
         Map(x => x.Value);
         HasMany(x => x.Sequences);
     }
}

Aber in diesem Fall werden drei Tabellen (A, B und Basis) erzeugt. Das ist schön, aber ich muss die Anzahl der Tabellen reduzieren, daher bin ich in Ordnung, um die Felder von Base in A- und B -Tisch zu haben. Im Allgemeinen möchte ich einfach A und B als normale Klassen abbilden (ohne Vererbung), aber ich muss in der Lage sein, eine andere Klasse hinzuzufügen, in der ich Eigenschaft haben kann:

public virtual IList<Base> ListofAandB {get;set;}

Wenn ich die Basemap -Definition entfernen und nur Map A und B als ClassMap <> erhalte, erhalte ich Fehler "Ich kann keine Kartendefinition für die Basis finden", wenn ich versuche, die oben geschriebene Eigenschaft zu verwenden.

War es hilfreich?

Lösung

Sie werden Ihre nicht abbilden können ListOfAAndB Eigenschaft Wenn Ihr Vererbung nur in Ihrem Code und nicht in Ihrem Datenbankmodell vorhanden ist. Wenn Sie diese Eigenschaft so definiert haben, benötigen Sie eine Base Tabelle in Ihrer Datenbank.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top