4

这是场景:

我有一个使用 NHibernate 的 winforms 应用程序。启动时,我使用 NHibernate 查询的结果填充 DataGridView。这部分工作正常。如果我更新该列表中的记录并刷新会话,则更新将进入数据库。在更新后关闭表单后,我调用一个方法来检索对象列表以再次填充 DataGridView 以获取更改并获取其他人可能发生的任何其他更改。问题是更新的记录,NHibernate 没有反映它给我的列表中的变化。当我插入或删除记录时,一切正常。只有当我更新时,我才会得到这种行为。我用他们的缓存机制把它缩小到NHibernate。我想不出一种方法来让 NHibernate 从数据库中检索而不是在更新发生后使用缓存。我在 NHibernate 论坛上发帖,但他们给我的建议没有用。我说了这个,没有人回复。我不会说明我尝试过的事情,以防我做得不对。如果您用我完全尝试过的东西来回答,我会在您回答的评论中说明。

这是我用来检索列表的代码:

public IList<WorkOrder> FindBy(string fromDate, string toDate)
{
    IQuery query = _currentSession.CreateQuery("from WorkOrder wo where wo.Date >= ? and wo.Date <= ?");
    query.SetParameter(0, fromDate);
    query.SetParameter(1, toDate);
    return query.List<WorkOrder>();
}

会话在构造时传递给类。我也可以发布我的映射文件,但我不确定它是否有任何问题,因为其他一切正常。有人见过这个吗?这是我使用 NHibernate 的第一个项目,感谢您的帮助。

4

2 回答 2

3

更新后,从一级缓存中逐出对象。

Session.Update(obj);
Session.Evict(obj);

您可能想先提交和/或刷新。

于 2008-10-10T15:14:04.473 回答
0

刷新呢?- 见9.2。加载文档的对象:

"sess.Save(cat); sess.Flush(); //强制 SQL INSERT sess.Refresh(cat); //重新读取状态(触发器执行后) "

于 2008-09-26T12:32:20.750 回答