以下是该方案:
我有一个使用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 :(得分:3)
更新后,从第一级缓存中删除对象。
Session.Update(obj);
Session.Evict(obj);
您可能想先提交和/或刷新。
答案 1 :(得分:0)
“sess.Save(猫); sess.Flush(); //强制SQL INSERT sess.Refresh(猫); //重新读取状态(触发器执行后) “