以下两段删除代码中,如果删除失败(例如主外键约束),在当前SESSION中,该实体已经被删除。
但是在数据库中依然存在的,而此时如果使用SESSION.GET方法来获取刚才删除失败的实体,将返回NULL值。
若要查询刚才删除失败的实体,那么需要打开一个新的SESSION。
代码一:
///<summary>
///清除数据库中 Users表中的所有数据,提供一个干净的测试数据环境
///</summary>
[Test]
public void ClearData() {
//ISession对象提供一个到后台数据库的连接,参数由App.config指定
//ITransaction对象提供一个可以被NHibernate管理的事 务。
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
//使用查询删除所有数据
session.Delete(”Select From User Where 1=1″);
transaction.Commit();
session.Close();
}
代码二:
///<summary>
///删除指定的对象
///</summary>
[Test]
public void DeleteTest() {
ISession session = factory.OpenSession();
ITransaction transaction = session.BeginTransaction();
User aUser;
try {
//当userId指定的数据在数据库中不存在时会抛出异常
aUser = session.Load(typeof(User), userId) as User;
if (aUser!=null) { session.Delete(aUser); }
transaction.Commit();
}
catch { transaction.Rollback(); }
finally { session.Close(); }
}