如何在更新后使用NHibernate从数据库中检索最新版本?

时间:2008-09-26 12:29:56

标签: winforms nhibernate

以下是该方案:

我有一个使用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的第一个项目,感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

更新后,从第一级缓存中删除对象。

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

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

答案 1 :(得分:0)

刷新怎么样? - 请参阅文档的9.2. Loading an object

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