1

私のシナリオ、オブジェクト化された関係を持つ多対多のマップをサポートするように 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でマッピングするためのヒント/解決策はありますか?

ブラジル

/イェンス

4

1 に答える 1

1

あなたが話している最初の例は、継承マッピングを調査する必要があるように聞こえますが、関連する追加のテーブルでどのように機能するかはわかりません。

2 番目の例では、Where 句を使用できるはずです。

HasManyToMany(x => x.Friends)
  .WithTableName("Person_Person")
  .Where("type = 2");
于 2009-03-11T09:05:05.097 に答える