2010-10-04 25 views
1

我有一個用戶,其中一些是員工。這是一對一的關係,並不是所有的用戶都是員工。如何在nhibernate中設置一對一的關係? (目前不返回異物)

當我得到一個用戶時,它似乎沒有帶回員工信息,它只是標記爲空。我以爲我已經對nhibernate有了一定的瞭解,但是我試圖在映射文件上使用這麼多的屬性,並沒有得到它的工作。任何想法或指針,我做什麼不正確?

用戶類別:

public class User 
    { 
     public virtual int UserID { get; set; } 
     public virtual string Username { get; set; } 
     public virtual string Title { get; set; } 
     public virtual string Forename { get; set; } 
     public virtual string Surname { get; set; } 

     public virtual Employee Employee { get; set; } 
    } 

用戶映射:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="Portal.Core" 
        namespace="Portal.Core.Data.Database"> 

    <class name="User" table="[Users]"> 
    <id name="UserID"> 
     <generator class="identity" /> 
    </id> 
    <property name="Username" not-null="true" length="50" /> 
    <property name="Title" length="10" /> 
    <property name="Forename" length="50" /> 
    <property name="Surname" length="50" /> 

    <one-to-one name="Employee" class="Employee" fetch="select" lazy="false" foreign-key="EmployeeID" /> 


    </class> 

</hibernate-mapping> 

Employee類:

public class Employee 
    { 
     public virtual int EmployeeID { get; set; } 
     public virtual string RoomNumber { get; set; } 
     public virtual string JobTitle { get; set; } 
     public virtual User User { get; set; } 
    } 

僱員映射:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="Portal.Core" 
        namespace="Portal.Core.Data.Database"> 

    <class name="Employee" table="[Employees]"> 
    <id name="EmployeeID"> 
     <generator class="identity" /> 
    </id> 
    <many-to-one name="User" unique="true" column="UserID" class="User" fetch="select" foreign-key="UserID" ></many-to-one> 

    <property name="RoomNumber" length="20" /> 
    <property name="JobTitle" length="20" /> 

    </class> 

</hibernate-mapping> 

回答

1

我能看到的唯一不同於Ayende的例子是您指定了一個外鍵標籤。也許嘗試剝離你的映射到Ayende的example(順便說一句,是完全相同的情況),並嘗試添加額外的屬性/屬性一個接一個?

+0

已經嘗試過他的例子。現在是一半的工作,如果我創建一個新用戶並添加員工記錄,它可以正常工作。當我嘗試合併兩個用戶(更新要附加到新用戶的員工記錄)時,它似乎失去了鏈接。 NHibernate很難調試:/ – Andrew 2010-10-12 10:24:42

+1

當你這樣做時,你正在打破「規則」 - 當你告訴NHibernate這是一對一的關係時 - 你不允許關聯的一端轉移到另一端終點。相反,您應該更新或創建用戶的員工記錄,這些記錄在您的操作後將保留。 – Goblin 2010-10-12 10:53:19

+0

澄清 - 這聽起來像你的情況不是真正的一對一的關係,而是一個compoenent。 – Goblin 2010-10-12 10:55:03

相關問題