habla nhibernate discriminador de la tabla relacionada
-
13-11-2019 - |
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.
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.