【问题标题】:NHibernate: Read uncommited columnsNHibernate:读取未提交的列
【发布时间】:2015-03-10 11:10:16
【问题描述】:

是否可以在将它们写入数据库的同一事务中读取(即选择)列?

我的代码如下所示:

using (IGenericTransaction trans = m_GenericSession.BeginTransaction())
{
    //persist a column to table tExample with Id = 1

    WriteSubItems();
    trans.Commit();
}

public void WriteSubItems()
{
    IDbTransaction trans = GetTransaction();
    //SELECT column from tExample with Id = 1 
}

WriteSubItems 执行一些基于读取之前写入事务中的列的逻辑。

我试过了:

 public IDbTransaction GetTransaction()
    {
        IDbCommand cmd = Session.Connection.CreateCommand())
        cmd .Connection = Session.Connection;
        Session.Transaction.Enlist(cmd );

        return command.Transaction;            
    }

但没有成功。尝试读取 tExample 总是返回空结果集。当我调用 Session.Transaction.Commit() 时,所有行都添加到数据库中,但事务仍然没有正确传递给 command.Transaction 或者它没有在那里使用

【问题讨论】:

    标签: c# sql nhibernate


    【解决方案1】:

    如果您想读取您在事务中所做的更新,并且您正在使用执行更新的同一会话,那么这些更新应该已经在内存中可供您使用。但是,如果您想通过另一个会话读取未提交的行,您可能必须在事务中使用不同的隔离级别。

    ITransaction transaction = session.BeginTransaction(System.Data.IsolationLevel.<insert correct isolation level here>);

    在此处阅读有关隔离级别的更多信息: https://msdn.microsoft.com/en-us/library/system.data.isolationlevel%28v=vs.110%29.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 2020-05-01
      相关资源
      最近更新 更多