【发布时间】:2017-03-07 00:17:03
【问题描述】:
是否可以从 NHibernate 事务中获取 DbConnection 和 DbTransaction 对象?
我需要在同一个事务中将一些 NHibernate 调用与第三方库结合起来。
【问题讨论】:
标签: c# sql nhibernate
是否可以从 NHibernate 事务中获取 DbConnection 和 DbTransaction 对象?
我需要在同一个事务中将一些 NHibernate 调用与第三方库结合起来。
【问题讨论】:
标签: c# sql 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();
【讨论】: