Pregunta

Tengo el siguiente 3 de la tabla con los valores de ejemplo de

Vehicles ( id = 1, type_id = 20 , ... )
Vehicle_Types ( vt_id = 20, class_id = 160, ... )
Vehicle_Classes ( vcls_id = 160, name = "Concrete1" )

Tengo

public class Concrete1 : Vehicle
{

}

Y quiero nhibernate para crear una Concrete1 cuando la carga del vehículo #1 en

Vehicle /*Concrete1*/ v = session.load<Vehicle>(1);

Cómo podría hacerlo con automappings?Gracias de antemano.

Edit1

Estoy empezando a pensar que esto es imposible, por lo tanto, cualquier solución sería apreciada.Alguna pista para el xml (no fluido) versión podría ser de gran ayuda.

¿Fue útil?

Solución

OK, primero, las malas noticias.

  • Usted no puede tener el infractor en una tabla separada, período.Usted puede hackear todo esto mediante el uso de una instrucción select con una combinación como la fuente table, pero entonces su entidad sería efectiva de sólo lectura.O usted puede utilizar un punto de vista, que podría funcionar, pero los delegados de más trabajo a la base de datos.
  • Incluso con una correcta asignación, session.load<Vehicle>(1) nunca devolverá un tipo derivado (excepto si deshabilita la carga diferida, lo cual es una mala idea, o si el concreto de la instancia ya estaba cargado como tal en la sesión).Usted puede conseguir el hormigón instancia con este hack.

Ahora, el modelo de datos parece que podría funcionar mejor con un Vehicle has-a Type relación de un <ConcreteVehicle> is-a Vehicle uno.

Esto le da más flexibilidad (se podría cambiar el tipo de un vehículo, por ejemplo), y puede mantener el polimorfismo de características mediante el uso de un modelo de estrategia (el tipo de vehículo que contiene el comportamiento).

Otros consejos

Creo que este post en el blog NHIBERNATE.INFO hace lo que está buscando.

http:// nhibibnate.info / blog / 2011/ 02/16 / GET-TOAD-POLYMORPHISM-IN-NHIBERNATE-3.HTML

Si no, podría darte una idea.

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