我遇到了Nhibernate缓存对象和返回旧版本的问题:
这是我正在运行的代码
public IList<Foo> GetFoos()
{
return _session.Query<Foo>().Where(f => f.State == 0).ToList();
}
public void Update(Foo foo)
{
foo.State = 1;
_session.Transaction.Begin();
_session.Update(foo);
_session.Transaction.Commit();
}
如果我在数据库中的状态0中有10个Foos并且我调用GetFoos
我得到10个状态为0的Foo对象,那很好。
如果我在每个Foo上调用Update
,数据库在状态1中显示10个foos,那很好。
现在如果我调用GetFoos
我得到0个Foo对象,那很好。
如果外部应用程序将所有Foos的状态更改为状态0,并且我运行GetFoos
方法,则返回10个对象,这很好。但是这些对象的状态都是1 !!!!!!,太可怕了!
现在如果我在所有foos上调用Update,数据库就不会更新,因为Nhibernate认为没有任何改变,所以它们永远保持在数据库中的状态0。
我的配置是否有问题,或者这是预期的行为? 如何让对象返回正确的新值?
由于
答案 0 :(得分:0)
会话(ISession实例)加载的实体将保留在第一级缓存中。您可以清除它们(ISession.Clear())或手动调用每个上的ISession.Refresh()以从DB获取当前值。