我可以从NHibernate获得底层的连接和事务对象吗?

本文关键字:连接 事务 对象 NHibernate 我可以 | 更新日期: 2023-09-27 18:14:57

是否可以从NHibernate事务中获得DbConnectionDbTransaction对象?

我需要在同一个事务中结合一些NHibernate调用和第三方库。

我可以从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();