2012-03-29 93 views
1

我的加入(遺留,不能改變)架構中有用戶和UserAddress之間的一對一的關係,具有複合鍵:nHib 3.2映射由碼對複合鍵

Users: 
- username (PK) 
- email (PK) 
- firsname 
- lastname 

UsersAddresses: 
- username (PK, FK) 
- email (PK, FK) 
- city 
- street 

我的原想法是使用一個<join,使他們都到同一個類:

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(""); 
       }); 

           }); 

有沒有辦法做到這一點?或者,也許我應該選擇一個組件或一對一的映射...

回答

0

嘗試使用Columns而不是Column - 它需要任意數量的列映射lambda來允許跨多列的映射對象,如您的密鑰:

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'是IColumnMapper類型,它沒有定義'ForeignKey'函數。任何其他想法? – 2012-04-01 08:19:56

+0

嗯,你是對的。所以看起來沒有辦法爲組合鍵定義外鍵名稱。但是,爲什麼你在意,你說過你的數據庫是遺留的,不能改變,只有在模式導出的情況下才需要設置外鍵名,ForeignKey纔是你需要的。 – NOtherDev 2012-04-01 08:53:34

+0

哦,所以在我對代碼映射的理解中存在一些根本性的缺失:我如何告訴NHib'UsersAddresses'中的哪一列引用'Users'中的哪一列? (即'username - > username_fk'等) – 2012-04-01 09:33:48