2010-05-13 64 views
0

我正在为创建软件创建安全系统,我想知道如何在NHibernate中完成以下操作(如果可能的话)NHibernate从一对多到一对一

用户帐户类别:

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

特权级别:

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

我将在数据库我有以下选项卡具有大量这些权限对象的(一个用于每个交易的实体),因此莱:

UserAccounts(用户名,用户名)
权限(用户名,PrivilegeType,读,写,修改,删除)

我怎样才能在InvoicePrivielge酒店需要从用户帐户映射到(用户ID,“发票”)特权。

我可以用多对一的方法做到这一点,但我不想收集特权,我宁愿将它映射到它的属性。

回答

2

我想办法做到这一点是建立在特权级的两个子类:

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

,并设置鉴别列和值。在流利的映射:

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

和使用子类在UserAccount

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

我没有功能NHibernate,没有办法做到这一点是正常的NHibernate的?这似乎是一个很好的做法:) – 2010-05-14 09:08:50