2010-05-13 4 views
0

Je crée le système de sécurité pour l'im création de logiciels et je voudrais savoir comment je peux faire ce qui suit dans NHibernate (si possible)NHibernate De One-To-Many One-To-One

classe de compte d'utilisateur:

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 Privilège:

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; } 
} 

Je vais avoir un grand nombre de ces objets de privilège (une pour chaque entité en bourse) ainsi dans la base de données que j'ai l'onglet suivant les:

UserAccounts (UserID, Nom d'utilisateur)
Privilèges (UserID, PrivilegeType, Lire, écrire, modifier, supprimer)

Comment puis-je mapper la propriété InvoicePrivielge du compte utilisateur au (ID utilisateur, 'Invoice') Privilège.

Je pourrais le faire en utilisant plusieurs-à-un mais je ne veux pas de collection de privilèges, je préfère le mapper à sa propriété.

Répondre

2

Je pense qu'une façon de le faire est de créer deux sous-classes de la classe Privilège:

public class InvoicePrivilege : Privilege 
{ 
} 
public class TradePrivilege : Privilege 
{ 
} 

et définir la colonne discriminante et la valeur. Dans la cartographie couramment:

public class PrivilegeMap : ClassMap<Privilege> 
{ 
    public PrivilegeMap() 
    { 
    // ... 
    DiscriminateSubClassesOnColumn("PrivilegeType") 
     .SubClass<InvoicePrivilege>("Invoice", x => x.Map(...)) 
     .SubClass<TradePrivilege>("Trade", x => x.Map(...)); 
    } 
} 

et utiliser les sous-classes dans le UserAccount

public virtual InvoicePrivilege InvoicePrivilege { get; set; } 
public virtual TradePrivilege TradePrivilege { get; set; } 
+0

Je n'ai pas Fluent NHibernate, une façon de le faire est en NHibernate normal? Cela semble être un bon moyen de le faire :) –

Questions connexes