存储过程调用后的后续读取

本文关键字:读取 存储过程 调用 | 更新日期: 2023-09-27 18:04:15

我有一个奇怪的行为的NHibernate和ADO.NET。我使用NHibernate作为标准的ORM,但有些操作用ADO更快。. NET(如批处理或调用存储过程)。

所以我要做如下操作

var item = _items.GetById(100);

然后我调用一个存储过程,该存储过程使用以下指令更新相同的实体

 var session = _sessionManager.OpenSession();
 using (var tx = session.BeginTransaction())
 {
      var item = _items.GetAll().FirstOrDefault(x => x.ItemCode == code);
      var cmd = session.Connection.CreateCommand();
      session.Transaction.Enlist(cmd);
      cmd.CommandType = CommandType.StoredProcedure;
      SqlParameter id = SQLUtil.GetParam("@bigId", SqlDbType.BigInt, inout: false);
      cmd.CommandText = "storedUpdateItem";
      cmd.Parameters.Add(SQLUtil.GetParam("@tstTS", SqlDbType.Timestamp, inout: false));
      cmd.Parameters.Add(id);
      int ret = cmd.ExecuteNonQuery();
      if (ret != 1)
      {
          throw new ApplicationException("Something gone wrong with update");
      } 
      tx.Commit();
      return _items.GetById(id.Value);
}

所以最后一个操作来检索再次使用NHibernate存储库模式的项目。问题是该项目没有与数据库更新。似乎是之前的版本。任何想法?

存储过程调用后的后续读取

可以通过使用session对象的Refresh方法强制NHibernate刷新item的缓存版本:

      ...
      var item = _items.GetById(id.Value);
      session.Refresh(item);
      return item;
}