0

作成中のソフトウェアのセキュリティ システムを作成していますが、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; }
}

これらの特権オブジェクトを多数 (取引されたエンティティごとに 1 つ) 持つことになるので、データベースには次のテーブルがあります。

UserAccounts ( UserID , Username)
Privileges ( UserID, PrivilegeType , Read,Write,Modify,Delete)

InvoicePrivielge プロパティをユーザー アカウントから (UserID, 'Invoice') 権限にマップするにはどうすればよいですか。

多対一を使用してこれを行うこともできますが、特権のコレクションは必要ありません。むしろ、それをそのプロパティにマップしたいと思います。

4

1 に答える 1

2

これを行う方法は、Privilege クラスの 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; }
于 2010-05-13T16:17:21.440 に答える