Domanda

Ho una classe base e due Childs (A: Base e B: Base), e voglio mapparli a due tabelle (tabelle A e B). Che è possibile in Fluent NHibernate? Così ho:

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

La mia mappatura è:

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

Ma in questo caso si crea tre tabelle (A, B e Base). Che bello, ma ho bisogno di ridurre il numero di tavoli, quindi sono ok per avere i campi di base sia in A e tabella B. In generale voglio mappare semplicemente A e B come classi normali (senza usare l'ereditarietà), ma ho bisogno di essere in grado di aggiungere qualche altra classe, dove posso avere la proprietà:

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

Se rimuovo definizione mappa di base e appena traccio A e B come ClassMap <> ricevo l'errore "Impossibile trovare mappa definizione per Base" se cerco di utilizzare la proprietà che è scritto sopra.

È stato utile?

Soluzione

Non sarà in grado di mappare la vostra proprietà ListOfAAndB se la vostra eredità è presente solo nel codice e non nel vostro modello di database. Per avere NHibernate Visualizza la proprietà come si definisce, si sta andando ad avere bisogno di un tavolo Base nel database.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top