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

C# 我可以从NHibernate获取底层连接和事务对象吗?,c#,sql,nhibernate,C#,Sql,Nhibernate,是否可以从NHibernate事务获取DbConnection和DbTransaction对象 我需要将一些NHibernate调用与同一事务中的第三方库结合起来。我们可以在NHibernate会话中启动事务,轻松访问DbConnection(如果有意义,甚至可以转换为SQL或Oracle one)。然后对其执行操作并应用最终提交/回滚: var session = ... // get an NHiberante ISession var transaction = session.Begin

是否可以从NHibernate事务获取
DbConnection
DbTransaction
对象


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

我们可以在NHibernate会话中启动事务,轻松访问
DbConnection
(如果有意义,甚至可以转换为SQL或Oracle one)。然后对其执行操作并应用最终提交/回滚:

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();

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

获取对DbTransaction对象的访问权限如何?事务是为您的连接共享的。。因此,您可以在会话中或以后在数据库连接上创建一个。。事实上还是一样的交易。。希望有帮助;)嗯。现在我想知道为什么DbCommand一开始就有一个事务属性。为什么不呢?问题在哪里?你可以在某个地方开始你的交易,只共享一个连接。稍后,通过触摸事务属性,您可以提交/回滚您的内容。这将是一个影响所有声明的声明。。。在事务创建后发出。正如我所说。。它可以在会话或db CONNECTON上创建。。因为事实上。。下面是相同的。更多关于理解基本ADO.NET,然后是NHiberante和3d party连接重用的问题。。。希望它变得更清晰;);)