0

次の列を持つ階層 (ツリー構造) SQL Server テーブル TEmployee があります。

Id bigint identity(1,1) not null
FirstName nvarhcar(50) not null
LastName nvarchar(50) not null
ManagerId bignint null

列 ID は主キーです。各従業員にはマネージャーがいます。その場合、彼/彼女自身の列 ManagerId の値は、別のマネージャー従業員行の値 Id を参照します。たとえば、テーブル TEmployee のいくつかのエントリ:

1 John Doe    null
2 Jane Smith  1
3 Keith Johnson 1
4 Fox   Lynson  2
5 Kim   McFeinstein 4
...

従業員 John Doe にはマネージャーがいません。しかし、彼はジェーン・スミスとキース・ジョンソンのマネージャーです。Kim McFeinstein のマネージャーは Fox Lynson です。

Fluent NHibernate マッピングを使用してドメイン モデル クラスとマッピング クラスを作成する方法を知りたいです。また、クラスのコードをマッピングする際に、カスケード削除の良い方法を知りたいです。つまり、John Doe を削除すると、そのすべての子 (John Doe が管理する従業員) も再帰的に削除されます。

助けてください。ありがとうございました。

ドメインモデルクラスですが、そのソースコードについてはわかりません:

public class Employee
{
   public virtual long Id {get;set;}
   public virtual string FirstName {get;set;}
   public virtual string LastName {get;set;}
   public virtual Employee  Manager {get;set;}  // not sure here ???
}

マッピングクラスですが、そのソースコードについてもわかりません:

public class EmployeeMap : MapClass<Employee>
{
   Table("TEmployee");
   SchemaAction.None();
   // not sure about following codes
   ???
}
4

1 に答える 1

1
public class Employee
{
   public virtual long Id {get; private set;}
   public virtual string FirstName {get;set;}
   public virtual string LastName {get;set;}
   public virtual Employee Manager {get;set;}
   public virtual ICollection<Employee> ManagedEmployees {get; private set;}
}

public class EmployeeMap : MapClass<Employee>
{
   Table("TEmployee");
   SchemaAction.None();

   Id(e => e.Id).GeneratedBy.HiLow("1000");
   References(e => e.Manager, "ManagerId");
   HasMany(e => e.Manager).KeyColumn("ManagerId").Cascade.All();
}
于 2012-06-21T06:19:33.740 に答える