我可以从NHibernate获得底层的连接和事务对象吗?
本文关键字:连接 事务 对象 NHibernate 我可以 | 更新日期: 2023-09-27 18:14:57
是否可以从NHibernate事务中获得DbConnection
和DbTransaction
对象?
我需要在同一个事务中结合一些NHibernate调用和第三方库。
ISession.Connection
返回IDBConnection
对象。有关交易,请参阅下面的博客文章。
//http://ayende.com/blog/1583/i-hate-this-code
private static IDbTransaction GetTransaction(ISession session)
{
using (var command = session.Connection.CreateCommand())
{
session.Transaction.Enlist(command);
return command.Transaction;
}
}
我们可以在NHibernate会话中启动事务,并且很容易访问DbConnection
(如果有意义的话,甚至可以转换为SQL或Oracle)。然后用它做一些事情,并应用最终的提交/回滚:
var session = ... // get an NHiberante ISession
var transaction = session.BeginTransaction();
var conn = session.Connection;
var dbConnection = conn as System.Data.Common.DbConnection;
// do the stuff with DbConnection
transaction.Commit();
// or
transaction.Rollback();