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

时间:2016-10-25 04:57:34

标签: c# sql nhibernate

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

我需要将一些NHibernate调用与同一事务中的第三方库结合起来。

2 个答案:

答案 0 :(得分:3)

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;
        }
    }

答案 1 :(得分:0)

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