请懂NHibernate的进!,告诉小弟什么问题

kwanlin 2012-06-10 01:34:07
//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>();
}

应该怎样改,请指点


...全文
171 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kwanlin 2012-06-11
  • 打赏
  • 举报
回复
问题已解决!感谢nhibernate之父
以及感谢yeness(15分)、zhujiawei7(5分)回答!
Iamagril 2012-06-11
  • 打赏
  • 举报
回复
有点乱,LZ 顶下
xuan.ye 2012-06-11
  • 打赏
  • 举报
回复
http://www.cnblogs.com/lyj/archive/2008/10/26/1319889.html
这里面有介绍,你那样写别说计算机不认识,nhibernate之父也不会认识
kwanlin 2012-06-11
  • 打赏
  • 举报
回复
Record表里有Time、PersonID(外键)字段
Person表里有PersonID(主键)、Name字段
现在是想在从根据Person表Name字段里面获取Record表里的Time字段
xuan.ye 2012-06-11
  • 打赏
  • 举报
回复
public List<Record> GetRecordByName(string Name) {
session = Factory();
List<Record> l = session.CreateQuery(" FROM Record WHERE NAME='1'").List<Record>();
return l;
}

需要using System.Collections.Generic;
using System.Linq;

------------------------------------------------
session.CreateCriteria<Person >(); 这块是Person
IList<Record> 这块是Recode 这是什么啊?
kwanlin 2012-06-11
  • 打赏
  • 举报
回复
public IList<Record> GetRecordByName(string Name) {
session = Factory();
ICriteria c = session.CreateCriteria<Person >();
c.Add(Expression.Eq("Name", Name));
return c.List <Record >();
}
改成上面就报下面错:
Unable to perform find[SQL: SQL not available]
xuan.ye 2012-06-11
  • 打赏
  • 举报
回复
xml 文件最好去掉 table 有的时候换数据库会有问题。

我一般都用session.CreateQuery
kwanlin 2012-06-10
  • 打赏
  • 举报
回复
那个Record映射文件是一定要有Name的字段吗?
kwanlin 2012-06-10
  • 打赏
  • 举报
回复
如果用原来根据姓名查的方法
c.Add(Expression.Eq("person.Name", Name));
就报错为
could not resolve property: person.Name of: Test.NHB.Record
kwanlin 2012-06-10
  • 打赏
  • 举报
回复
报错
c.CreateCriteria<Person>().Add(Expression.Eq ("Name",Name));
错误 1 非泛型 方法“NHibernate.ICriteria.CreateCriteria(string, string, NHibernate.SqlCommand.JoinType, NHibernate.Criterion.ICriterion)”不能与类型实参一起使用 D:\Users\Kwan\Desktop\Test.SVN\Test.DatabaseAccess\NHibernateScroll.cs 187 15 Test.DatabaseAccess
zhujiawei7 2012-06-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

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

第3句贴错了。
ICriteria c = session.CreateCriteria<Record>();
c.CreateCriteria<Person>().Add(Expression.Eq("Name", Name));
return c.List <Record>();
zhujiawei7 2012-06-10
  • 打赏
  • 举报
回复
ICriteria c = session.CreateCriteria<Record>();
c.CreateCriteria<Person>().Add(Expression.Eq("Name", Name));
ICriteria c = session.CreateCriteria<Record>();

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



62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧