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

NHibernate数据检索问题

  •  0
  • user366312  · 技术社区  · 15 年前

    这些代码在保存数据时运行良好。

    但它无法从中检索数据 b_TeacherDetail -桌子。例如:

    TeacherRepository tRep = new TeacherRepository();
    Teacher t = tRep.Get(12);
    

    在这里, t.TeacherDetail null . 但我知道有一个条目 b\教师详图 -教师id 12的桌子。

    我的桌子是:

    Teacher {ID, Name, IsActive, DesignationID, DepartmentID}
    TeacherDetail {ID, TeacherID, Address, MobileNo}
    

    public class Teacher
        {
            public virtual int ID { get; set; }
            public virtual string Name { get; set; }
            public virtual bool IsActive { get; set; }        
            public virtual TeacherDetail TeacherDetail { get; set; }
    
            public virtual Designation Designation { get; set; }
            public virtual Department Department { get; set; }        
        }
    

    教师详情.cs

    public class TeacherDetail
        {
            public virtual int ID { get; set; }
            public virtual Teacher Teacher { get; set; }
            public virtual string Address { get; set; }
            public virtual string MobileNo { get; set; }
        }
    

    <class name="Teacher" table="b_Teacher">
        <id name="ID" column="ID">
          <generator class="native"/>
        </id>
    
        <property name="Name" column="Name" />
        <property name="IsActive" column="IsActive" />
    
        <one-to-one class="TeacherDetail" name="TeacherDetail" cascade="all" />
    
        <many-to-one name="Department" class="Department" unique="true" column="DepartmentID" />
        <many-to-one name="Designation" class="Designation" unique="true" column="DesignationID" />
      </class>
    

    TeacherDetail.hbm.xml文件

    <class name="TeacherDetail" table="b_TeacherDetail">
        <id name="ID" column="ID">
          <generator class="native"/>
        </id>
    
        <property name="Address" column="Address" />
        <property name="MobileNo" column="MobileNo" />
    
        <many-to-one name="Teacher" class="Teacher" column="TeacherID" unique="true" />
      </class>
    

    public class Repository<T> : IRepository<T>
        {
            ... ... ...
    
            public T Get(object id)
            {
                T obj = default(T);
    
                try
                {
                    if (!_session.Transaction.IsActive)
                    {
                        _session.BeginTransaction();
                        obj = (T)_session.Get<T>(id);
                        _session.Transaction.Commit();
                        _session.Flush();
                    }
                    else
                    {
                        throw new Exception(CustomErrorMessage.TransactionAlreadyInProgress);
                    }
                }
                catch (Exception)
                {
                    _session.Transaction.Rollback();
                    _session.Clear();
    
                    throw;
                }
    
                return obj;
            }
    ... ... ... 
    }
    

    教师资源库.cs

    public class TeacherRepository : Repository<Teacher>
        {
        }
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Jaguar    15 年前

    您缺少对的引用 TeacherDetail Teacher 地图中的视点(nhibernate不知道如何获取实体)

    因此,在Teacher.hbm.cml中,将更改为:

    <one-to-one class="TeacherDetail" name="TeacherDetail" cascade="all" property-ref="Teacher" />
    

    教师细节 这有它的特点

        2
  •  0
  •   chrissie1    15 年前

    我认为你应该让老师多对一,而不是一对一