2010-12-02 5 views
0

Avec la définition de table:FluentNhibernate classe A rejoint

Employee 
    EmployeeId Primary Key 
    LastName 
    FirstName 

EmployeeAddress 
    EmployeeAddressId  
    EmployeeId 
    Address 
    City 

et la définition de la classe

public class Employee 
{ 
    public int EmployeeId {get; set;} 
    public string LastName {get; set;} 
    public string FirstName {get; set;} 

    public EmployeeAddress EmployeeAddress {get; set;} 
} 

Quelle cartographie de type doit être utilisé pour remplir Employee.EmployeeAddress. Ma première tentative a été

Reference(x=>x.EmployeeAddress).Column("EmployeeId") 

qui génère la jointure comme

Employee.EmployeeId = EmployeeAddress.EmployeeAddressId 

Puis-je utiliser Inscrivez-vous pour le faire? Quelque chose comme

Join("EmployeeAddress", join => join.Map(x => x.EmployeeAddress). 

Cela génère une erreur lors de l'appel de configure. Il semble que je ne peux utiliser que Join pour les propriétés individuelles et non la classe. Je peux obtenir Join pour travailler si j'ajoute des propriétés dans la classe Employee pour l'adresse et la ville, puis les mapper, mais je veux le mapper en tant que classe et non chaque propriété individuelle.

Répondre

0

Je ne sais pas la syntaxe Fluent (pour one-to-one il est HasOne et many-to-one c'est References), mais c'est le XML résultant:

<class name="Employee"> 
    <id name="EmployeeId"> 
    <generator class="..." /> 
    </id> 
    <property name="FirstName" /> 
    ... 
    <one-to-one name="EmployeeAddress" cascade="all" property-ref="Employee" /> 
</class> 
<class name="EmployeeAddress"> 
    <id name="EmployeeAddressId"> 
    <generator class="..." /> 
    </id> 
    <property name="Address" /> 
    ... 
    <many-to-one name="Employee" column="EmployeeId" unique="true" cascade="all" /> 
</class>