2012-03-29 3 views
1

My (legacy, kann nicht geändert werden) Schema hat eine Eins-zu-Eins-Beziehung zwischen Benutzern und useraddress, mit einem zusammengesetzten Schlüssel:nHib 3.2 Zuordnung von Code kommt auf zusammengesetzte Schlüsseln

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

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

Mein ursprünglichen Idee war es, ein <join zu verwenden, sie alle zu derselben Klasse zu bringen:

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

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

    } 

aber ich weiß nicht, über die Abbildung:

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

           }); 

Gibt es einen Weg, dies zu erreichen? Oder vielleicht sollte ich für eine Komponente oder eine Eins-zu-Eins-Zuordnung wählen ...

Antwort

0

Versuchen Sie mit Columns anstelle von Column - es dauert eine beliebige Anzahl von Spaltenzuordnung Lambdas um Mapping-Objekte über mehrere Spalten, wie Ihr Schlüssel zu ermöglichen:

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' ist vom Typ' IColumnMapper', der keine 'ForeignKey'-Funktion definiert. Irgendwelche anderen Ideen? –

+0

Nun, du hast Recht. Es scheint also, dass es keine Möglichkeit gibt, Fremdschlüsselnamen für zusammengesetzte Schlüssel zu definieren. Aber warum kümmert es dich, du hast gesagt, dass deine Datenbank veraltet ist und nicht geändert werden kann und "ForeignKey" nur benötigt wird, um den Namen eines fremden Schlüssels im Falle eines Schema-Exports einzurichten, was du nicht tust. – NOtherDev

+0

oh, also fehlt mir etwas grundlegend in meinem Verständnis von Mapping nach Code: Wie kann ich NHib mitteilen, welche Spalte in 'UsersAddresses' auf welche Spalte in' Users' verweist? (ie 'username -> benutzername_fk' etc.) –

Verwandte Themen