Cache con dipendenza da SQL Server 2005 e ASP.NET 2.0
SQL Server 2005 offre un supporto nativo alla dipendenza su database di oggetti salvati in Cache, una delle novità offerte dall’infrastruttura di cache di ASP.NET 2.0.
Questa possibilità consente di sfruttare gli HttpListener di ASP.NET, così che sia SQL Server ad inviare le notifiche sui cambi nei risultati della query, anzichè essere ASP.NET a farne una ad intervalli regolari per verificare che i dati siano cambiati.
Tra l’altro questo consente di limitare di molto la fase di configurazione della dipendenza, che si limita ad abilitare il supporto del Service Broker sul database e dare l’accesso all’utente, il tutto eseguendo questi comandi:
ALTER DATABASE mioDatabase SET ENABLE_BROKER
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO mioNome
Per tenere in cache il risultato di una query fino a che la stessa non avrà modificato i propri dati è sufficiente associare il SqlCommand utilizzato ad una nuova istanza di tipo SqlCacheDependency, così che il risultato venga monitorato e l’oggetto in cache venga poi invalidato e rimosso in automatico.
C#
using (SqlConnection conn = new SqlConnection(miaStringaConnessione))
{
// query da eseguire
SqlCommand cmd = new SqlCommand("SELECT campo1, campo2 FROM miaTabella", conn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = command;
// definizione della dipendenza
SqlCacheDependecy dep = new SqlCacheDependency(cmd);
// caricamento dei dati
DataTable mioDataTable = new DataTable("nomeDataTable");
da.Fill(mioDataTable);
// aggiunta in cache
Cache.Insert("nome", nomeDataTable, dep);
}
Fino alla modifica della tabella mia Tabella , i dati risultati dalla query rimarranno nella cache e pertanto l’elemento non verrà rimosso.