题
当我的C#开始,WPF UI启动时,加载时,其中一个选项卡调用此代码。显示的最新数据是11-FEB-2012,即使有15-FEB-2012的安装文档。当我点击“刷新”按钮时,调用了完全相同的代码,只有这次显示了最新结果。相同的代码如何产生两个不同的结果?
IQueryable<EntityBase> installationSummaries =
QueryAndSetEtags(session => session.Query<InstallationSummary>()
.Include(x => x.ApplicationServerId)
.Include(x => x.ApplicationWithOverrideVariableGroup.ApplicationId)
.Include(x => x.ApplicationWithOverrideVariableGroup.CustomVariableGroupId)
.OrderByDescending(summary => summary.InstallationStart)
.Take(numberToRetrieve));
注意:我在另一个查询中遇到了完全相同的问题。好像我已经有一段时间没有查询过了,我得到了不正确的结果。如果我刚完成后再次查询,我会得到正确的结果。我想知道我是否必须创建索引。有超过10,000个安装文档,性能很好。这是我遇到麻烦的准确性。
解决方案
听起来像是一个过时的索引问题。尝试添加此行,看看是否有帮助
.Customize(x => x.WaitForNonStaleResultsAsOnNow())
更新:使用waitfornonstaleresultsonnow()更好,而不是waitfornonstaleresults()
编辑:为什么?
原因是,您的查询将创建一个临时索引,在一段时间不活动之后将自动删除。此外,他们将无法在Ravendb的重新启动中幸存下来。现在您有一些选择:
促进使用管理工作室的索引永久性
在您的应用程序中创建索引,并在查询时使用该索引
等待Raven自我优化并自动促进索引(这只有在查询经常运行时才发生,这似乎不太可能在您的情况下)
使用上述概述的.waitfornonstaleresuls()选项(这是 最糟糕的 因为它可能会对应用程序性能产生非常负面的影响,因此无需,因为其他选项要好得多)
不隶属于 StackOverflow