martes, 24 de marzo de 2020

Cómo utilizar SqlDatasource y la propiedad CacheKeyDependency para manejar memoria Caché en Asp.net

PROBLEMA : A veces tenemos un control SqlDataSource al cual le queremos colocar un tiempo de cache largo, ejemplo de 10 horas, supongamos que este control contiene un Query de las Areas de la empresa, pero puede que haya algo en nuestra aplicación asp.net que requiera actualizar la cache del SqlDataSoruce antes de las 10 horas, pudo haber un cambio en las Areas y necesitamos que se vuelva a ejecutar el Query ante la base de datos. Cómo manejar este uso de Caché?

SOLUCION : El control SqlDataSource tiene la propiedad CacheKeyDependency, la cual permite colocar un nombre de memoria Cache, al cual por codígo fuente se puede resetear desde cualquier pagina Web de mi proyecto asi :

--Parte I : En tiempo de Diseño establecer las Propiedades del SqlDataSource

asp:SqlDataSource ID="SqlDataSource1" runat="server"
CacheDuration="600" CacheKeyDependency="CacheSqlAreas" EnableCaching="True"
ConnectionString="<%$ ConnectionStrings:CadConexSQL %>" 
SelectCommand="SELECT * FROM [Area]"


--Parte II. Código fuente de pagina Web.
const string CACHE_PROVIDERS = "CacheSqlAreas";

protected void Page_Load(object sender, EventArgs e)
{
    //IMPORTANTE Establecer la Cache si esta no existe.
    if (Cache[CACHE_PROVIDERS] == null)
        Cache[CACHE_PROVIDERS] = DateTime.Now;

}


//Al ser Cache[CACHE_PROVIDERS] un objeto Global puede ser utilizado en cualquier parte del proyecto, para
//Borrar la memoria Cache que utiliza el SqlDataSource. Esto hará que al volver hacer DataBind()
//del Control que lo utilice se vuelva a hacer el Query en la base de datos.
protected void BtonDeleteCache_Click(object sender, EventArgs e)

   //Borrar la Caché del SqlDataSource.
    Cache[CACHE_PROVIDERS] = DateTime.Now;
}

No hay comentarios.: