【发布时间】:2015-10-14 08:16:57
【问题描述】:
我有一个奇怪的 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 存储库再次检索该项目的最后一个操作。问题是该项目未随数据库更新。好像是以前的版本。有什么想法吗?
【问题讨论】:
标签: c# nhibernate ado second-level-cache