2010-05-13 7 views
0

Я создаю систему безопасности для программного обеспечения им создания, и я хотел бы знать, как я могу сделать следующее в NHibernate (если вообще возможно)NHibernate От One-To-Many к One-To-One

Класс счета

пользователя:

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

Privilege Класс:

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 (Идентификатор_пользователя, Имя пользователя)
привилегий (USERID, PrivilegeType, чтение, запись, изменение, удаление)

Как можно сопоставить свойство InvoicePrivielge из учетной записи пользователя к (UserID, 'Invoice') Привилегия.

Я мог бы сделать это, используя много-к-одному, но мне не нужен набор привилегий, я бы скорее сопоставил его с его собственностью.

ответ

2

Я думаю, что способ сделать это, чтобы создать два подкласса класса Privilege:

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

Я не Fluent NHibernate, любой способ сделать это в нормальном NHibernate? Кажется, это хороший способ сделать это :) –

Смежные вопросы