存储过程调用后的后续读取
本文关键字:读取 存储过程 调用 | 更新日期: 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;
}