Nhibernate от одного к одному к одному
-
26-09-2019 - |
Вопрос
Я создаю систему безопасности для программного обеспечения IM, создавая, и я хотел бы знать, как я могу сделать следующее в Nibernate (если вообще возможно)
Класс учетной записи пользователя:
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; }
}
У меня будет большое количество этих объектов привилегий (один для каждого торгуемого объекта), поэтому в базе данных у меня есть следующие таблицы:
Учетные записи пользователей ( Логин пользователя, Имя пользователя)
Привилегии (UserID, привилегентный спектр, Читать, писать, модифицировать, удалить)
Как я могу сопоставить свойство InvoicePrivielge с учетной записи пользователя на привилегию (usiD, 'Shoice').
Я мог бы сделать это, используя много к одному, но я не хочу набрать привилегии, я бы предпочел сопоставить его к своей собственности.
Решение
Я думаю, что способ сделать это - создать два подкласса класса привилегий:
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; }