Frage

Wenn meine C#, die WPF -Benutzeroberfläche startet, ruft einer der Registerkarten diesen Code beim Laden auf. Die neuesten angezeigten Daten sind 11-Feb-2012, obwohl es Installations-Dokumente für 15-Feb-2012 gibt. Wenn ich die Taste von Aktualisierung drücke, wird genau dieser Code aufgerufen, nur diesmal werden die neuesten Ergebnisse angezeigt. Wie kann der gleiche Code zwei verschiedene Ergebnisse erzielen?

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));

Hinweis: Ich habe genau das gleiche Problem mit einer anderen Frage. Es scheint, als hätte ich seit einiger Zeit nicht mehr gefragt, ich erhalte die falschen Ergebnisse. Wenn ich wieder direkt nach dem Abfragen nachgefragt habe, bekomme ich die richtigen Ergebnisse. Ich frage mich, ob ich einen Index erstellen muss. Es gibt über 10.000 Dokumente für Installationen, und die Leistung ist in Ordnung. Es ist die Genauigkeit, mit der ich Probleme habe.

War es hilfreich?

Lösung

Klingt nach einem abgestandenen Indexproblem. Versuchen Sie, diese Zeile hinzuzufügen und zu sehen, ob dies hilft

.Customize(x => x.WaitForNonStaleResultsAsOnNow())

UPDATE: Es ist besser, WaitFornonStaleresultsasAnnow () zu verwenden als WaitFornonstaleresults ()

EDIT: Warum ist das so?
Der Grund dafür ist, dass Ihre Abfrage einen temporären Index erstellt, der automatisch nach einer Zeit der Inaktivität gelöscht wird. Darüber hinaus werden sie keinen Neustart von Ravendb überleben. Jetzt haben Sie ein paar Optionen:

  • Fördern Sie den Index, um mit dem Management Studio dauerhaft zu sein

  • Erstellen Sie einen Index in Ihrer Anwendung und verwenden Sie diesen Index bei Abfrage

  • Warten Sie, bis Raven sich selbst optimiert und den Index automatisch fördert (dies geschieht nur, wenn die Abfrage oft genug ausgeführt wird, was in Ihrem Fall unwahrscheinlich erscheint).

  • Verwenden Sie die Option .waitfornonstaleresulsuls (), wie oben beschrieben (dies ist schlechteste Weil es sich sehr negativ auf die Anwendungsleistung auswirken kann und es nicht erforderlich ist, da die anderen Optionen viel besser sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top