Windows · 2010-05-25

NHIBERNATE中 ISession.Delete方法 使用过程中遇到的问题.

以下两段删除代码中,如果删除失败(例如主外键约束),在当前SESSION中,该实体已经被删除。

但是在数据库中依然存在的,而此时如果使用SESSION.GET方法来获取刚才删除失败的实体,将返回NULL值。

若要查询刚才删除失败的实体,那么需要打开一个新的SESSION。

代码一:

///

///清除数据库中 Users表中的所有数据,提供一个干净的测试数据环境 /// [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();

}

代码二:

///

///删除指定的对象 /// [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();  }

}