代码之家  ›  专栏  ›  技术社区  ›  Andrew

我如何在nhibernate建立一对一的关系?(当前不返回外部对象)

  •  1
  • Andrew  · 技术社区  · 16 年前

    我有一个用户,其中一些是雇员。这是一对一的关系,并非所有用户都是员工。

    当我得到一个用户时,它似乎没有带回员工信息,只是将其标记为空。我本以为我已经了解了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>
    

    员工类别:

    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 回复  |  直到 16 年前
        1
  •  1
  •   Goblin    16 年前

    我能看到的唯一不同于Ayende的例子是您指定了一个外键标记。也许试着把你的地图撤到Ayende's example (顺便问一下,哪一个是完全相同的场景)并尝试逐个添加额外的属性/属性?

    推荐文章