2012-03-29 9 views
1

マイに参加(レガシー、変更することができない)スキーマは複合キーとユーザとUserAddressとの間に1対1の関係を有していますアイデアは、同じクラスにそれらすべてを持って<joinを使用していた:nHib 3.2マッピングが複合キー

public class UserDTO 
    { 
     public string Username { get; set; } 
     public string Email { get; set; } 

     public string FirstName { get; set; } 
     public string City { get; set; } 
     //etc... 

    } 

が、私は、マッピングについて知らない:

Join("UsersAddresses", j=> 
       { 
        j.Table("UsersAddresses"); 
        j.Fetch(FetchKind.Join); 
        j.Optional(false); 
        j.Key(k=> 
          { 
        //What here???           
        k.Column(c=> 
         { 
          c.Name(""); 
          c.Name(""); 
         }); 
        k.ForeignKey(""); 
        k.ForeignKey(""); 
       }); 

           }); 

これを達成する方法はありますか?または、おそらくコンポーネントまたは1対1のマッピングを選択する必要があります。

答えて

0

Columnの代わりにColumnsを試してください - 複数の列にまたがるマッピングオブジェクトを許可するには、任意の数の列マッピングラムダが必要です。

Join("UsersAddresses", j => 
{ 
    j.Table("UsersAddresses"); 
    j.Fetch(FetchKind.Join); 
    j.Optional(false); 
    j.Key(k => 
    { 
     k.Columns(c => 
     { 
      c.Name("username"); 
      c.ForeignKey("username_fk"); 
     }, c => 
     { 
      c.Name("email"); 
      c.ForeignKey("email_fk"); 
     }); 
    }); 
}); 
+0

'c'は' ForeignKey'関数を定義しない 'IColumnMapper'型です。他のアイデア? –

+0

まあ、そうです。したがって、複合キーの外部キー名を定義する方法はないようです。しかし、なぜあなたは気にしますか、あなたのデータベースは従来のものであり、変更することはできないと言ってきました。あなたがしないスキーマのエクスポートの場合には、外部キー名を設定するためだけに 'ForeignKey'が必要です。 – NOtherDev

+0

ああ、コードによるマッピングの理解に根本的に欠けていることがあります: 'UsersAddresses'のどの列が' Users'のどの列を参照しているかをNHibに伝えるにはどうすればいいですか? (すなわち 'username - > username_fk'など) –