2016-11-19 14 views
3

私は、データベース内の2つのテーブルを持っていますチームと連携することができますが、そうする必要はありません。チームはウェブサイトにアライメントすることはできますが、そうする必要はありません。したがって、両者の関係はどちらか一方でもどちらでもありません。アプリケーションレベルの追加の強制コードや1:多くのマッピングを必要とせずに、流暢なnhibernateを使ってこの1:1の関係をどのようにマッピングできますか?</p> <ul> <li><strong>チーム表</strong>(ID、名前、WebsiteId(NULL可能))</li> <li><strong>ウェブサイトの表</strong>(ID、名前)</li> </ul> <p>ウェブサイト:

もともと、私はこれを行うの見ることができる唯一の方法はこれを行うことによって、多くのマッピングを作成することです:

WebsiteMapクラス

HasMany(x => x.Teams).AsBag().Inverse().Fetch.Select().BatchSize(50); 

TeamMapクラス

References(x => x.WebSite).Nullable(); 

が、 1:1マッピングを強制するのを訂正するために、私はこのコードを持っている私のウェブサイトのクラスでこれをしなければならない:

public virtual Team Team 
    { 
     get 
     { 
      return Teams.FirstOrDefault(); 
     } 
    } 

この変換を行う必要がないように、マッピングレイヤ自体でこの関係を正しく記述するにはどうすればよいですか?

ここで重要なことは、これらのテーブルの1つがもう一方のスレーブではないことです。私が流暢なnhibernateと約1:1のマッピングでインターネット上で見るすべての例は、最初の(UserテーブルとUserPreferencesテーブルのような)なしで2番目のテーブルが存在しないと仮定しますが、それは私の状況ではありません。

上記の私の例では、両側のnullableはマスターでもスレーブでもないので、
これを流暢なnhibernateにマップする正しい方法は何ですか?

+0

は関係NULL可能列を持つ両側にこれだけではなく、1対1のマッピングですか? – starlight54

+0

はい、私はその質問にどのように答えているのかわかりません – leora

+0

ここではFluentを使ってOne-to-Oneを行う方法についての回答があります。両端に 'Nullable()'を追加するだけでシナリオ。 http://stackoverflow.com/questions/6085568/how-to-do-a-fluent-nhibernate-one-to-one-mapping#answers – starlight54

答えて

1

これは特にNHibernateではなく、問題なく動作するソリューションですが、2つの間の関係を含む3番目のテーブルを作成することもできます。

ウェブサイトの表、その後の関係表と1対なしの関係を持っているでしょうチーム表両方。

次に、中間テーブルにmentioned in the commentsのような関係を使用できます。

ので:Team_WebSite(TeamId、WebSiteId)

関連する問題

 関連する問題