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à.

È stato utile?

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; }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top