Pregunta

Tengo una clase base y dos niños (A: base y B: base), y quiero asignarlos a dos tablas (Tabla A y Tabla B). ¿Es eso posible en nhibernato fluido? Así que tengo:

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

Mi mapeo es:

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

Pero en ese caso crea tres tablas (A, B y Base). Eso es bueno, pero necesito reducir el número de tablas, por lo que estoy bien tener los campos de la base en la mesa A y B. En general, simplemente quiero mapear A y B como clases normales (sin usar herencia), pero necesito poder agregar otra clase, donde puedo tener propiedades:

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

Si elimino la definición de mapa básico y simplemente mapeo A y B como ClassMap <> Recibo error "No puedo encontrar la definición de mapa para la base" si intento usar la propiedad que está escrita anteriormente.

¿Fue útil?

Solución

No podrás mapear tu ListOfAAndB Propiedad si su herencia está presente solo en su código y no en su modelo de base de datos. Para que Nhibernate mape esta propiedad tal como se define, necesitará un Base tabla en su base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top