La gestione della cache con il controllo LinqDataSource di ASP.NET 3.5

di Giuseppe Marchi, in ASP.NET 3.5, LinqDataSource, DataBinding,

Il controllo LinqDataSource ci permette di avvalerci della funzionalità di LINQ all'interno di una pagina ASP.NET ed effettuare query su fonti di dati enumerabili, come è possibile leggere dall'articolo di Andrea Zani sui nuovi controlli di ASP.NET 3.5.

Oltre alle note proprietà per identificare la classe di "contesto", la tabella (o proprietà pubblica) contenente le informazioni da selezionare ed eventuali opzioni di selezione, ordinamento e raggruppamento, il controllo LinqDataSource ci offre due eventi all'interno dei quali possiamo aggiungere un meccanismo personalizzato di gestione dei dati all'interno della cache della pagina.
Gli eventi in questione sono Selecting e Selected: il primo viene scatenato prima che venga eseguita l'operazione di select, mentre il secondo viene scatenato dopo che la medesima operazione è stata conclusa. L'oggetto che dobbiamo inserire in cache sarà la fonte di dati vera e propria dalla quale il controllo di selezione effettuerà la sua lettura, così da velocizzare le richieste successive alla pagina.

<asp:LinqDataSource ID="linqDSCache" runat="server"
    ContextTypeName="NorthwindDataContext" TableName="Customers" 
    onselected="linqDSCache_Selected" onselecting="linqDSCache_Selecting" />        
<asp:DropDownList ID="ddlCache" runat="server" DataSourceID="linqDSCache"
    DataTextField="ContactName" DataValueField="CustomerID" />

public partial class _Default : System.Web.UI.Page
{
  private const string cachekey = "LinqDataSourceCacheSample";

  protected void Page_Load(object sender, EventArgs e)
  {}

  protected void linqDSCache_Selecting(object sender, LinqDataSourceSelectEventArgs e)
  {
    object source = Cache[cachekey];
    if (source == null)
      return;

    e.Result = source;
  }
  
  protected void linqDSCache_Selected(object sender, LinqDataSourceStatusEventArgs e)
  {
    object source = Cache[cachekey];
    if (source != null)
      return;
    
    Cache.Insert(cachekey, e.Result, null, DateTime.Now.AddSeconds(30), System.Web.Caching.Cache.NoSlidingExpiration);
  }
}

Quindi, prima dell'operazione di selezione viene prelevata la fonte di dati (se presente) dalla cache e viene eventualmente passata al controllo LinqDataSource, mentre alla fine della selezione stessa, tale oggetto viene inserito in cache (solo se non già presente).
La fonte di dati ci viene data dalla proprietà Result della classe LinqDataSourceSelectEventArgs, argomento dell'evento Selecting e viene successivamente salvato sempre tramite una proprietà chiamata Result, ma della classe LinqDataSourceStatusEventArgs, argomento dell'evento Selected.

Per approfondimenti:
I nuovi controlli di ASP.NET 3.5: LinqDataSource, ListView e DataPager
https://www.aspitalia.com/articoli/asp.net3.5/linqdatasource-listview-datapager.aspx

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi