NHibernate缓存问题

时间:2014-05-22 14:31:13

标签: c# nhibernate fluent-nhibernate

我遇到了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。

我的配置是否有问题,或者这是预期的行为? 如何让对象返回正确的新值?

由于

1 个答案:

答案 0 :(得分:0)

会话(ISession实例)加载的实体将保留在第一级缓存中。您可以清除它们(ISession.Clear())或手动调用每个上的ISession.Refresh()以从DB获取当前值。