So Tired !_! 逆水行舟, 不进则退!

25May/10

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

Posted by Nick Xu

以下两段删除代码中,如果删除失败(例如主外键约束),在当前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();  }

}

   
site
site