¿Cómo se implementa el almacenamiento en caching en Linq a SQL?

Acabamos de empezar a utilizar LINQ to SQL en el trabajo para nuestro DAL y realmente no hemos llegado a un estándar para el model de almacenamiento en caching. Anteriormente estábamos utilizando una class base 'DAL' que implementaba una propiedad de gestor de caching de la que todas nuestras classs DAL henetworkingaron, pero ahora no la tenemos. Me pregunto si alguien ha presentado un enfoque "estándar" para el almacenamiento en caching de los resultados de LINQ to SQL.

Estamos trabajando en un entorno web (IIS) si eso hace la diferencia. Sé que esto bien puede terminar siendo una pregunta subjetiva , pero sigo pensando que la información sería valiosa.

EDITAR: para aclarar, no estoy hablando de almacenar en caching un resultado individual, estoy buscando más de una solución de architecture, como en cómo configurar el almacenamiento en caching para que todos los methods de enlace utilicen la misma architecture de almacenamiento en caching.

Una respuesta rápida: utilice el patrón Repositorio (vea Diseño impulsado por el dominio de Evans) para search sus entidades. Cada repository almacenará en caching las cosas que contendrá, idealmente al permitir que cada instancia del repository acceda a un caching singleton (cada subprocess / request creará una instancia de un nuevo repository, pero solo puede haber un caching).

La respuesta anterior funciona solo en una máquina. Para poder usar esto en muchas máquinas, use memcached como su solución de almacenamiento en caching. ¡Buena suerte!

Mi caching de resultados de consultas LINQ es probablemente lo que estás buscando.

 var q = from c in context.Customers where c.City == "London" select new { c.Name, c.Phone }; var result = q.Take(10).FromCache(); 

Pete.

Está justo debajo de tu nariz:

 List<TableItem> myResult = (from t in db.Table select t).ToList(); 

Ahora, solo almacene en caching myResult como lo hubiera guardado en caching los datos devueltos de su antiguo DAL.

Encontré esta publicación , que ofrece un método de extensión como medio de almacenamiento en caching de los objects LINQ.

He estado golpeando mi cabeza contra la panetworking para que los debilitados ahora intenten descubrir una buena solución de almacenamiento en caching para Linq2SQL, y debo admitir que realmente estoy luchando por encontrar una talla única para todos …

El patrón de repository tiende a limitar la utilidad de Linq, ya que (sin volver a implementar IQueryable) el almacenamiento en caching debe realizarse fuera de la instrucción Linq.

Además, la carga diferida y el seguimiento de objects son grandes nodos si va a almacenar en caching sus objects, lo que hace que las actualizaciones sean un poco más complicadas.

¡Cualquiera que haya logrado resolver este problema en la naturaleza dentro de un proyecto web altamente concurrente, por favor, toque y salve el mundo! 🙂

Entiendo que esta es quizás una respuesta un poco tarde … No obstante, puede intentarlo en el proyecto LinqToCache . Enlaza una SqlDepdency en una consulta LINQ arbitraria, si es posible, y proporciona la invalidation de caching activa a través de las notifications de consulta del lado del server. Las consultas deben ser consultas válidas para notifications, consulte Crear una consulta para notifications . La mayoría de las consultas de Linq a sql se ajustan a estas restricciones, siempre que las tablas se especifiquen utilizando nombres de dos partes ( dbo.Table , no solo Table ).

Vea el método 'GetReferenceData' en la class 'ReferenceData' en este artículo : http://blog.huagati.com/res/index.php/2008/06/23/application-architecture-part-2-data-access- layer-dynamic-linq /

Utiliza el caching de la página asp.net para el almacenamiento en caching de los datos recuperados utilizando L2S.