私のシナリオ、オブジェクト化された関係を持つ多対多のマップをサポートするように NHibernate を構成する方法についての回答を探しています。
他の Person:s との関係を持つ Person:s のコレクションがあります。各関係には、関係のタイプを指定する属性があります。RDB では、これは、テーブルで指定された関係タイプを持つ多対多テーブルを使用することによって行われます。モデルは、「親友」や「大敵」などのより多くのタイプを許可することで拡張できます。
Person オブジェクトをクエリして、関連するすべての Person をタイプ別に返すことができるようにしたいと考えています
<IList>Person myEnemies = myPerson.getRelatedPersons(relationType.Enemy)
また
<IList>Person myFriends = myPerson.getRelatedPersons(relationType.Friend)
別の (拡張性の低い) 解決策は、クラスで静的に他の関係が存在することを指定することです。
public class Person
{
public virtual int Id { get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual IList<Person> Friends { get; set; }
public virtual IList<Person> Enemies { get; set; }
}
現在、「Person」テーブルと「PersonPerson」テーブルを備えたレガシー データベースを使用する必要があります。「PersonPerson」テーブルは、関係タイプを整数として保持します。
以下のような構文を使用してこれを実行しようとしましたが、これまでのところ成功していません...
// How to specify type=1 here?
HasManyToMany(x => x.Friends).WithTableName("Person_Person");
// How to specify type=2 here?
HasManyToMany(x => x.Enemies).WithTableName("Person_Person");
これを(流暢な)NHibernateでマッピングするためのヒント/解決策はありますか?
ブラジル
/イェンス