在其中,我们可以发现:
2006-04-15 13:52:13,093 [AdpaterExeMgrThread1] DEBUG NHibernate.SQL [(null)] - SELECT person0_.id as id0_, person0_.name as name0_ FROM Person person0_ WHERE person0_.id=@p0
2006-04-15 13:52:13,093 [AdpaterExeMgrThread1] DEBUG NHibernate.SQL [(null)] - @p0 = '1'
对了,就是这里,NHibernate替我们构造了一条sql语句,并添加一个参数,然后将我们在代码中赋的id值1来填充,这样,一条完整的可以执行的sql语句产生了。
请注意:在产生sql语句的前面,NHibernate构造了一个IDBCommand,然后在sql语句产生完全后,获取连接,通过一个DataReader来填充Persion对象给我们使用,这就是NHibernate替我们做的事,是不是很简单啊?(真的很简单吗??看看源代码吧!!)
请仔细研究输出的日志。
如法炮制,我们添加另外3个Test,完成单个表的全部CRUD操作,如下完整代码:
Delete的方法如下:
[TestMethod]
public void TestCreate()

{
Person person = new Person();
person.Name = "Jackie Chan";

ITransaction trans = session.BeginTransaction();
try

{
session.Save(person);
trans.Commit();
Assert.IsTrue(person.Id > 0);
}
catch (Exception ex)

{
trans.Rollback();
Assert.Fail(ex.Message);
}
}

[TestMethod]
public void TestUpdate()

{
Person person = (Person)session.Get(typeof(Person), 1);
person.Name = "Jet Li";

ITransaction trans = session.BeginTransaction();
try

{
session.Save(person);
trans.Commit();
Assert.IsTrue(person.Name == "Jet Li");
}
catch (Exception ex)

{
trans.Rollback();
Assert.Fail(ex.Message);
}
}

[TestMethod]
public void TestRead()

{
Person person = (Person)session.Get(typeof(Person), 1);
Assert.IsTrue(person.Name == "Jackie Chan");
}

[TestMethod]
public void TestDelete()

{
Person person = (Person)session.Get(typeof(Person), 1);

ITransaction trans = session.BeginTransaction();
try

{
session.Delete(person);
trans.Commit();
}
catch (Exception ex)

{
trans.Rollback();
Assert.Fail(ex.Message);
}
}

直接传入需要delete的对象即可。
好了,基本的操作都完成了,是不是很Easy?
好了,这一篇就讲这么多,我们下次再接着练习。