Dopo molti esperimenti ho trovato la risposta ad essere abbastanza semplice, anche se tutt'altro che scontato;
public void Clear<T>()
{
session.Advanced.DocumentStore.DatabaseCommands.PutIndex(indexName, new IndexDefinitionBuilder<T>
{
Map = documents => documents.Select(entity => new {})
});
session.Advanced.DatabaseCommands.DeleteByIndex(indexName, new IndexQuery());
}
Certo che quasi certamente non definiresti il tuo indice e fare la vostra eliminazione in un colpo solo, ho messo questo come un metodo unico per brevità.
La mia implementazione definisce gli indici all'avvio dell'applicazione come raccomandato dalla documentazione.
Se si desidera utilizzare questo approccio per indicizzare effettivamente una proprietà di T, sarà necessario vincolare T. Ad esempio se si dispone di un IEntity ereditato da tutte le classi di documenti e questa classe specifica un ID di proprietà. Quindi un 'dove T: IEntity' ti consentirebbe di usare quella proprietà nell'indice.
E 'stato detto in altri luoghi, ma è anche la pena notare che una volta che si definisce un indice statico Raven probabilmente usarlo, questo può causare le vostre domande a apparentemente non restituiscono i dati che hai inserito:
RavenDB Saving to disk query
fonte
2012-04-19 06:30:00
Come contributore RavenDB, non è consigliabile in questo modo, poiché si sta creando un indice inutilmente. Invece, raccomando la risposta di @ alexn: http://stackoverflow.com/a/13049179/536 –