NHibernate De Uno-A-Muchos a uno-a-uno
-
26-09-2019 - |
Pregunta
Estoy creando el sistema de seguridad para el software de creación de im y me gustaría saber cómo puedo hacer el siguiente en NHibernate (si es posible)
Clase CuentaUsuario:
public class UserAccount
{
public virtual int UserID { get; set; }
public virtual String Username { get; set; }
public virtual Privilege InvoicePrivilege { get; set; }
public virtual Privilege TradePrivilege { get; set; }
}
Clase de privilegio:
public class Privilege
{
public virtual bool Read { get; set; }
public virtual bool Write { get; set; }
public virtual bool Delete { get; set; }
public virtual bool Modify { get; set; }
}
Me va a tener un gran número de estos objetos de privilegio (uno para cada entidad negociado) por lo que en la base de datos que tengo las siguientes tablas:
UserAccounts ( ID de usuario , nombre de usuario)
Privilegios ( ID de usuario, PrivilegeType , leer, escribir, modificar, borrar)
¿Cómo puedo asignar la propiedad InvoicePrivielge de la cuenta de usuario al (ID de usuario, 'Factura') de privilegios.
Yo podría hacer esto utilizando muchos-a-uno, pero no quiero una colección de privilegios, estaría bastante mapa a su propiedad.
Solución
Creo que una manera de hacer esto es crear dos subclases de la clase de privilegios:
public class InvoicePrivilege : Privilege
{
}
public class TradePrivilege : Privilege
{
}
y establecer la columna y el valor del discriminador. En cartografía fluidez:
public class PrivilegeMap : ClassMap<Privilege>
{
public PrivilegeMap()
{
// ...
DiscriminateSubClassesOnColumn("PrivilegeType")
.SubClass<InvoicePrivilege>("Invoice", x => x.Map( ... ))
.SubClass<TradePrivilege>("Trade", x => x.Map( ...));
}
}
y utilizar las subclases en el UserAccount
public virtual InvoicePrivilege InvoicePrivilege { get; set; }
public virtual TradePrivilege TradePrivilege { get; set; }