Проблема получения данных из NHibernate - PullRequest
0 голосов
/ 09 июля 2010

Эти коды работают хорошо при сохранении данных.

Но он не может получить данные из b_TeacherDetail -таблицы.Например:

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

Здесь t.TeacherDetail равно null.Но я знаю, что в таблице b_TeacherDetail есть запись для идентификатора учителя 12.

Почему?

Мои таблицы:

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

Учитель.CS

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; }        
    }

TeacherDetail.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; }
    }

Teacher.hbm.xml

<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>

Repository.cs

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;
        }
... ... ... 
}

TeacherRepository .cs

public class TeacherRepository : Repository<Teacher>
    {
    }

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

вам не хватает ссылки на TeacherDetail с точки зрения Teacher в вашем отображении.(nhibernate не знает, как получить объект)Teacher Значение идентификатора свойства равно значению идентификатора этого (учителя) класса.

0 голосов
/ 09 июля 2010

Я думаю, вы должны сделать Учителя подробным «Много к одному», а не «один к одному»

...