说明
我们依次从删除对象、新建对象、更新对象、查询对象来介绍在NHibernate中如何使用存储过程的整个详细过程。在NHibernate的映射文件中,在Class元素中提供了<sql-delete>、<sql-insert>、<sql-update>元素用于删除、新建、更新对象,注意这三个元素顺序唯一,也就是说在配置文件里,这三个配置节的顺序是固定的。在根元素提供了<sql-query>元素用来查询对象。
准备
虽然我们在NHibernate.cfg.xml文件中配置了<property name="show_sql">true</property>配置节,这样就可以输出NHibernate自动生成的sql语句了,但是在我这里只能输出select语句的生成sql,其它的什么delete、update之类都没见到过。没办法,既然在NHIbernate里无法看到所有的生成的sql的话,就直接到sql server数据库中来查看吧!我们可以使用SQL事件探查器来跟踪NHibernate生成的所有sql语句,如果已经使用过的话可以直接跳过,如果还没使用过的话,我简单介绍一下使用方法,因为我也是才使用,所以也只能介绍最基本的查看功能。
1) 打开程序:所有程序-》Microsoft SQL Server-》事件探查器
2) 新建跟踪:文件-》新建-》跟踪-》输入正确的服务器、用户名和密码-》确定
3) 跟踪属性配置:在这里可以配置跟踪属性,如果你有细致的需要可以这里配置,这里我们不修改任何配置,直接点“运行”出现如下结果:
4) 上面图中的网格部分是每个事件的跟踪列表,下面灰色背景的是详细信息,我们如果选中了上面网格中的某行的话,详细信息就会出现下面的部分,这样方便查看。
一、使用事件查探器跟踪NHibernate生成的sql语句
1) 首先向Customer表中添加几行数据(多加几行),等后面测试删除时需要用,如下:
insert into Customer values('test','Name')
2) 编写DAL中的删除方法,如下:
//使用存储过程删除Customer
public void DeleteCustomer(int customerId)
{
Customer customer = session.Get<Customer>(customerId);
session.Delete(customer);
session.Flush(); //同步到数据库
}
3) 编写DAL.Test中的测试方法如下:
[Test]
public void DeleteCustomerTest()
{
sample.DeleteCustomer(x); //x表示一个CustomerId,请自己查看数据库中的值
}
4) 右键上面的测试方法,并点击执行“run test(s)”命令,再来看SQL事件查探器中的数据,如下:
从图片中可以清楚的看到NHibernate生成的删除语句,呵呵,挺好理解的吧,也不需要用什么其它的软件或插件。
二、执行删除对象的存储过程
1) 首先,我们新建删除Customer