是否可以从NHibernate事务中获取DbConnection
和DbTransaction
个对象?
我需要将一些NHibernate调用与同一事务中的第三方库结合起来。
答案 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();