Nhibernate Session.BeginTransaction()返回的实例是否等于Session.Transaction?
我有一个关于NHibernate交易的问题。据我所知,有两种方法可以从Nhibernate Session.BeginTransaction()返回的实例是否等于Session.Transaction?,nhibernate,Nhibernate,我有一个关于NHibernate交易的问题。据我所知,有两种方法可以从ISession检索ITransaction 选项1 ISession.BeginTransaction(); 选项2 ISession.Transaction; 如果我像这样连续地执行它们 ITransaction trans = session.BeginTransaction(); ITransaction trans2 = session.Transaction; trans是否等于trans2?NHiberna
ISession
检索ITransaction
选项1
ISession.BeginTransaction();
选项2
ISession.Transaction;
如果我像这样连续地执行它们
ITransaction trans = session.BeginTransaction();
ITransaction trans2 = session.Transaction;
trans
是否等于trans2
?NHibernate source@
来自Isession@NHibernate.Impl.SessionImpl的会话实现
public ITransaction BeginTransaction()
{
using (new SessionIdLoggingContext(SessionId))
{
if (rootSession != null)
{
// Todo : should seriously consider not allowing a txn to begin from a child session
// can always route the request to the root session...
log.Warn("Transaction started on non-root session");
}
CheckAndUpdateSessionStatus();
return connectionManager.BeginTransaction();
}
}
public ITransaction Transaction
{
get { return connectionManager.Transaction; }
}
来自NHibernate.Adonet.ConnectionManager类
public ITransaction BeginTransaction()
{
Transaction.Begin();
return transaction;
}
public ITransaction Transaction
{
get
{
if (transaction == null)
{
transaction = session.Factory.TransactionFactory.CreateTransaction(session);
}
return transaction;
}
}
beginTransaction状态为开始事务,而session.transaction将返回当前活动事务,如果为null,则将根据实现创建一个活动事务。它将是相同的实例。谢谢你,卡基!