Pregunta

Acabamos de comenzar a usar LINQ to SQL en el trabajo para nuestro DAL y realmente no hemos creado un estándar para nuestro modelo de almacenamiento en caché.Anteriormente estábamos usando una clase base 'DAL' que implementaba una propiedad de administrador de caché que todas nuestras clases DAL heredaban, pero ahora no la tenemos.Me pregunto si a alguien se le ha ocurrido un enfoque "estándar" para almacenar en caché los resultados de LINQ to SQL.

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

EDITAR: Para aclarar, no estoy hablando de almacenar en caché un resultado individual, busco más una solución de arquitectura, como cómo configurar el almacenamiento en caché para que todos sus métodos de enlace utilicen la misma arquitectura de almacenamiento en caché.

¿Fue útil?

Solución

Una respuesta rápida:Utilice el patrón Repositorio (consulte Diseño basado en dominio de Evans) para recuperar sus entidades.Cada repositorio almacenará en caché los elementos que contendrá, idealmente permitiendo que cada instancia del repositorio acceda a un caché único (cada subproceso/solicitud creará una instancia de un nuevo repositorio, pero solo puede haber un caché).

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

Otros consejos

Mi Caché de resultados de consultas LINQ Probablemente sea justo 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, simplemente almacene en caché myResult como lo habría hecho con los datos devueltos por su antiguo DAL.

encontré esta publicación, que ofrece un método de extensión como medio para almacenar en caché los objetos LINQ.

Me he estado golpeando la cabeza contra la pared buscando puntos débiles tratando de encontrar una buena solución de almacenamiento en caché para Linq2SQL, y debo admitir que realmente estoy luchando por encontrar una solución única para todos...

El patrón del repositorio tiende a limitar la utilidad de Linq, ya que (sin volver a implementar IQueryable) el almacenamiento en caché debe realizarse fuera de la declaración de Linq.

Además, la carga diferida y el seguimiento de objetos son dos grandes cosas que no se deben hacer si vas a almacenar en caché tus objetos, lo que hace que realizar actualizaciones sea algo más complicado.

Cualquiera que haya logrado resolver este problema en la naturaleza dentro de un proyecto web altamente concurrente, ¡participe y salve el mundo!:)

Entiendo que esta sea quizás una respuesta un poco tardía...No obstante, puedes probar el LinqToCache proyecto.Engancha un SqlDepdency en una consulta LINQ arbitraria, si es posible, y proporciona una invalidación de caché activa a través de las notificaciones de consulta del lado del servidor.Las consultas deben ser consultas válidas para notificaciones, ver Crear una consulta para notificación.La mayoría de las consultas de Linq a SQL cumplen con estas restricciones, siempre que las tablas se especifiquen utilizando nombres de dos partes (dbo.Table, no solo Table).

Consulte el método 'GetReferenceData' en la clase '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 caché de la página asp.net para almacenar en caché los datos recuperados usando L2S.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top