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>
已經嘗試過他的例子。現在是一半的工作,如果我創建一個新用戶並添加員工記錄,它可以正常工作。當我嘗試合併兩個用戶(更新要附加到新用戶的員工記錄)時,它似乎失去了鏈接。 NHibernate很難調試:/ – Andrew 2010-10-12 10:24:42
當你這樣做時,你正在打破「規則」 - 當你告訴NHibernate這是一對一的關係時 - 你不允許關聯的一端轉移到另一端終點。相反,您應該更新或創建用戶的員工記錄,這些記錄在您的操作後將保留。 – Goblin 2010-10-12 10:53:19
澄清 - 這聽起來像你的情況不是真正的一對一的關係,而是一個compoenent。 – Goblin 2010-10-12 10:55:03