.net 使用NHibernate执行查询

.net 使用NHibernate执行查询,.net,nhibernate,.net,Nhibernate,我是NHibernate的新手,所以这是一个基本问题 当通过NHibernate会话从数据库获取数据时,到目前为止,我只使用了Id,例如: var customer = Session.Get<Customer>(customerId); var customer=Session.Get(customerId); 但是如何基于不是Id的属性获取对象呢?例如,通过搜索Name属性来获取客户。这可能会返回0-n个答案,所以我假设我会得到一个列表 使用HQL,它看起来像: sessi

我是NHibernate的新手,所以这是一个基本问题

当通过NHibernate会话从数据库获取数据时,到目前为止,我只使用了Id,例如:

var customer = Session.Get<Customer>(customerId); 
var customer=Session.Get(customerId);

但是如何基于不是Id的属性获取对象呢?例如,通过搜索Name属性来获取客户。这可能会返回0-n个答案,所以我假设我会得到一个列表

使用HQL,它看起来像:

session.CreateQuery("from Customer where Name=:name")
       .SetString("name", name)
       .List<Customer>();
session.CreateQuery(“来自客户,其中Name=:Name”)
.SetString(“名称”,名称)
.List();

这里基本上有两个选项:和。Hibernate文档非常棒,因此我强烈建议您阅读它,而不是让我发布一个不必要的冗长答案。

另一个选项是最近的

用法如下所示=>

var employees = Session.Linq<Employee>()
    .Single(employee=>employee.Name==name);
var employees=Session.Linq()
.Single(employee=>employee.Name==Name);

Linq扩展方法返回实现IQueryable的INHibernateQueryable接口。

查询NHibernate的方法有很多:

  • HQL
  • 标准
  • 举例查询
  • 查询条件
  • LINQ(提供2个不同的LINQ提供程序)
  • H-SQL
  • SQL
  • 您可以实现自己的查询方式

谢谢!工作完美,HQL看起来相当不错-是吗?谢谢!criteriaapi看起来也很有趣。我们会更仔细地看一看;与HQL相比,我更喜欢标准API。:)我想我会坚持到NH3。它还在成熟。好吧-这看起来很有趣!目前,我要学习的新框架和新技术太多了,所以我现在不能再学习了。但是谢谢你;Linq2NHibernate很有名,我以后一定会仔细看看!另一个linq提供者是NHibernate.linq。它比3.0提供程序更有限,但有限的功能相当稳定。事实上,我已经在实际项目中使用过。很好用。linq2nhibernate与hql/icriteria并不相互排斥。感谢您的丰富列表!您个人的偏好是什么?根据查询的复杂程度,我使用以下选项:1.beta linq,2.old linq 3.hql 4.hsql 5.sql。我过去使用过标准,但与linq相比,它更容易出错。只要您为查询编写测试,并在异常情况下使用其他查询方法,beta-linq就可以使用。