2011-09-09 21 views
1

私たちは、学生と教授の間のデータベース(ブリッジテーブル付き)でモデル化された多対多の関係ですが、 1対1の関係としてモデル化したいとします。つまり、学生には1人の教授がいます。ここで流暢なnhibernate:多対多の関係を1対多の関係としてマッピングする

は、私たちの試みであるが、それは仕事をdoesntの:

protected StudentMap() 
     { 
      Id(x => x.Id); 
      Map(x => x.Name); 

      Join("student_professor_selected", m => 
      {             
       m.KeyColumn("student_professor_selected_key"); 
       m.References(x => x.Professor); 
      }); 
     } 

答えて

0

は全く違うものである参加します。クラスの一部を別のテーブルに配置するために使用されます(1対1)。

教授から学生に多対多の関係をマップするだけで、それは常にC#の単純なリストです。

学生から教授への1つの終わりの参照としてそれをマップすることはできません。しかし、あなたは私有財産で教授のリストをマッピングし、ちょうど最初の要素を返す教授プロパティ実現することができます。以下のように助けを

private IList<Professor> professors; 

public Professor Professor { get { return professors.First(); } } 
+0

で教授キーをマップするためにブリッジテーブルですこれは地図ですか?あなたはこれを行うことはできません... 'HasManyToMany (x => x.Professors)'フィールドはプライベートなので、それはリストではないのでpublicプロパティを使用できません。 –

+0

申し訳ありませんが、マッピングがどのように正確に見えるか、私はFluentを使用していないとは言えません。何らかのHasManyToManyでなければなりません。フィールドをマッピングするには、ある程度の方法が必要です。 –

+0

FNHでプライベートコレクションをマップする方法については、この記事をご覧くださいhttp://stackoverflow.com/questions/781443/private-collection-mapping-in-fluent-nhibernate –

0

おかげで、私の解決策でした。教授クラスの中で私は、次を追加しました:

private IList<Professor> _professors; 
public Professor Professor { get { return _professors.First(); } } 

、その後、私は次のことをやった、これをマップする、professor_student_selectedは、どのように希望学生のキー

HasManyToMany<Students>(Reveal.Member<Professor>("_professors")).Table("professor_student_selected").ChildKeyColumn("student_key").ParentKeyColumn("professor_key");