Question

J'ai une classe de base et deux Childs (A: Base et B: base), et je veux les associer à deux tables (tables A et B). Est-ce possible dans Fluent NHibernate? J'ai donc:

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;}
}

Ma carte est:

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);
     }
}

Mais dans ce cas, il crée trois tables (A, B et base). C'est bien, mais je dois réduire le nombre de tables, donc je suis ok pour avoir des champs de base dans les deux tableau A et B. En général, je veux simplement la carte A et B comme des classes normales (sans utiliser l'héritage), mais je dois être en mesure d'ajouter une autre classe, où je peux avoir la propriété:

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

Si je supprime la définition et carte BaseMap juste A et B comme ClassMap <> Je reçois l'erreur « Impossible de trouver la définition de carte pour base » si je tente d'utiliser la propriété qui est écrit ci-dessus.

Était-ce utile?

La solution

Vous ne pourrez mapper votre propriété ListOfAAndB si votre héritage est présent uniquement dans votre code et non dans votre modèle de base de données. Pour avoir NHibernate la carte de cette propriété telle qu'elle est définie, vous allez avoir besoin d'une table Base dans votre base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top