📅  最后修改于: 2023-12-03 15:17:52.811000             🧑  作者: Mango
NHibernate是一个流行的ORM框架,它可以将数据库操作封装为面向对象的方式,提供了LINQ、Criteria和QueryOver等多种查询方式。
QueryOver是一种基于强类型的查询API,它可以帮助程序员减少错误,并提高代码的可读性。本文将介绍如何使用NHibernate-QueryOver查询。
可以通过NuGet Package Manager搜索并安装NHibernate包,或者在官方网站下载。对于本文的示例,我们将使用NHibernate5.2.7版本。
在项目中添加一个名为“hibernate.cfg.xml”的文件,该文件包含连接数据库所需的信息。
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">server=.;database=MyDb;uid=sa;pwd=123456;</property>
<property name="show_sql">true</property>
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
</session-factory>
</hibernate-configuration>
创建一个名为User的实体类,以及一个名为User.hbm.xml的映射文件,将数据库表中的字段映射到实体类中。
实体类:
public class User
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime BirthDay { get; set; }
public virtual int Age { get; set; }
public virtual string Address { get; set; }
}
映射文件:
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true">
<class name="NHibernateQueryOverDemo.Model.User,NHibernateQueryOverDemo" table="Users">
<id name="Id" column="Id">
<generator class="identity"/>
</id>
<property name="Name" column="Name"></property>
<property name="BirthDay" column="BirthDay"></property>
<property name="Age" column="Age"></property>
<property name="Address" column="Address"></property>
</class>
</hibernate-mapping>
在查询数据之前,需要创建一个NHibernate会话对象。可以通过以下方法创建:
// 读取配置文件
var configuration = new Configuration().Configure();
// 创建SessionFactory
var sessionFactory = configuration.BuildSessionFactory();
// 创建Session
using (var session = sessionFactory.OpenSession())
{
// 查询数据
}
using (var session = sessionFactory.OpenSession())
{
var users = session.QueryOver<User>()
.List();
foreach (var user in users)
{
Console.WriteLine(user.Name);
}
}
using (var session = sessionFactory.OpenSession())
{
var users = session.QueryOver<User>()
.Where(u => u.Age > 18 && u.Name.IsLike("张%"))
.List();
foreach (var user in users)
{
Console.WriteLine(user.Name);
}
}
using (var session = sessionFactory.OpenSession())
{
var pageIndex = 2;
var pageSize = 10;
var users = session.QueryOver<User>()
.Skip((pageIndex - 1) * pageSize)
.Take(pageSize)
.List();
foreach (var user in users)
{
Console.WriteLine(user.Name);
}
}
以上就是NHibernate-QueryOver查询的基本操作,更多高级操作可以查阅官方文档。