日期:2014-05-17  浏览次数:20350 次

请懂NHibernate的进!,告诉小弟什么问题
//Record类
namespace Test.NHB {
  public class Record { public virtual int ID { get; set; }
  public virtual DateTime Time { get; set; }
  public virtual Person person { get; set; }
  public virtual Department department { get; set; }
  }
}

//Record映射
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name ="Test.NHB.Record,Test.NHB" table ="Record" lazy ="true ">
  <id name ="ID" column ="Record">
  <generator class ="native"></generator>
  </id>
  <property name ="Time" column ="Time"></property>
  <many-to-one name ="person" column="PersonID" cascade="all" fetch="join"></many-to-one>
  </class>
</hibernate-mapping>
//Person类
namespace Test.NHB
{
  public class Person
  { public virtual int PersonID { get; set; }
  public virtual string Name { get; set; }  
  }
}

//person映射
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name ="Test.NHB.Person,Test.NHB" table ="Person">
  <id name="PersonID">
  <generator class ="native"></generator>
  </id>
  <property name ="Name" column="[Name]"></property>
  </class>
</hibernate-mapping>

//根据ID可以查询
  public IList<Record> GetRecordByID(int id) {
  //Factory()];
  session = Factory();
  ICriteria c = session.CreateCriteria<Record>();
  c.Add(Expression.Eq("person.PersonID", id));
  return c.List <Record >();
  }
//以下报错,但根据PersonId查询可以,根据姓名不可以
  public IList<Record> GetRecordByName(string Name) {
  session = Factory();
  ICriteria c = session.CreateCriteria<Record>();
  c.Add(Expression.Eq("person.Name", Name));
  return c.List <Record>();
  }

应该怎样改,请指点




------解决方案--------------------
探讨

ICriteria c = session.CreateCriteria<Record>();
c.CreateCriteria<Person>().Add(Expression.Eq("Name", Name));
ICriteria c = session.CreateCriteria<Record>();

改成这样试试,你最好贴出错误信息。

------解决方案--------------------
http://www.cnblogs.com/lyj/archive/2008/10/26/1319889.html
这里面有介绍,你那样写别说计算机不认识,nhibernate之父也不会认识