2008-09-26 69 views
4

这里是场景:如何在更新后使用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的第一个项目,感谢您的帮助。

+0

我在我的应用程序中有同样的问题,虽然我使用Castle ActiveRecord。当我找到答案时,我会发布它。如果您首先找到答案,请告诉我们! – FryHard 2008-10-10 04:41:16

回答

0

什么关于刷新? - 看到文档的9.2. Loading an object

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

3

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

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

您可能希望首先提交和/或刷新。

相关问题