Herencia con fluidez y por subclase
-
27-10-2019 - |
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.
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.