当我的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()选项(这是 最糟糕的 因为它可能会对应用程序性能产生非常负面的影响,因此无需,因为其他选项要好得多)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top