NHibernate Da Uno-a-molti a uno-a-uno
-
26-09-2019 - |
Domanda
sto creando il sistema di sicurezza per l'im software creazione e vorrei sapere come posso effettuare le seguenti operazioni in NHibernate (se possibile)
User Account Classe:
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; }
}
Classe di 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; }
}
I sarà avere un gran numero di questi oggetti di privilegio (uno per ogni entità scambiato) quindi nel database ho le seguenti tabelle:
UserAccounts ( UserID , nome utente)
Privilegi ( UserID, PrivilegeType , leggere, scrivere, modificare, cancellare)
Come faccio a mappare la proprietà InvoicePrivielge dall'account utente al (UserID, 'fattura') Privilege.
ho potuto farlo usando molti-a-uno, ma io non voglio un insieme di privilegi, preferirei la mappa alla sua proprietà.
Soluzione
Penso che un modo per farlo è quello di creare due sottoclassi della classe Privilege:
public class InvoicePrivilege : Privilege
{
}
public class TradePrivilege : Privilege
{
}
e impostare la colonna discriminatore e valore. In mappatura fluente:
public class PrivilegeMap : ClassMap<Privilege>
{
public PrivilegeMap()
{
// ...
DiscriminateSubClassesOnColumn("PrivilegeType")
.SubClass<InvoicePrivilege>("Invoice", x => x.Map( ... ))
.SubClass<TradePrivilege>("Trade", x => x.Map( ...));
}
}
e utilizzare le sottoclassi nel UserAccount
public virtual InvoicePrivilege InvoicePrivilege { get; set; }
public virtual TradePrivilege TradePrivilege { get; set; }