Domanda

Quando il mio C #, WPF UI inizia, una delle schede chiama questo codice quando il caricamento. I dati più recenti visualizzati è 11-Feb-2012, anche se ci sono documenti InstallationSummary per 15-Feb-2012. Quando mi ha colpito il pulsante di aggiornamento, questo stesso codice esatto viene chiamato, solo che questa volta vengono visualizzati i risultati più recenti. Come può lo stesso codice di produrre due risultati diversi?

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

Nota: Sto avendo lo stesso problema esatto con un'altra query. Sembra come se non l'ho interrogato in un po ', mi vengono i risultati non corretti. Se interrogo ancora a destra dopo che ho appena fatto, ottengo i risultati giusti. Mi chiedo se devo creare un indice. Ci sono più di 10.000 documenti InstallationSummary, e le prestazioni sono più che bene. E 'la precisione che sto avendo problemi con.

È stato utile?

Soluzione

suona come un problema di indice di stantio. Provare ad aggiungere questa linea e vedere se questo aiuta

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

Aggiornamento: E 'meglio usare WaitForNonStaleResultsAsOnNow () di WaitForNonStaleResults ()

Modifica: Perché è che
? La ragione è, che la query creerà un indice temporaneo che in automatico verranno cancellati dopo un certo tempo di inattività. Inoltre, non sopravviverà un riavvio di RavenDB. Ora avete un paio di opzioni:

  • promuovere l'indice per essere permanente con lo studio di gestione

  • creare un indice all'interno dell'applicazione e l'uso che indice quando l'esecuzione di query

  • attesa per raven a sé stesso ottimizzare e promuovere l'indice automaticamente (questo avviene solo se la query verrà eseguita abbastanza spesso, che sembra improbabile nel tuo caso)

  • utilizzare i .WaitForNonStaleResuls () opzione come descritto sopra (questo è peggiore , perché può avere un impatto molto negativo sulle prestazioni delle applicazioni e non c'è alcun bisogno di perché le altre opzioni sono molto meglio )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top