Intereting Posts
Как проверить, существует ли триггер в PostgreSQL? выводя полный последовательный диапазон значений Реализация алгоритма расстояния Jaro Winkler в Transact SQL SQL противоречит ограничению FOREIGN KEY sql как объединить три запроса из двух таблиц в один запрос SQL группирует одинаковые значения вместе Поиск значений Auto Incremented из инструкции INSERT OR IGNORE в SQLite Как использовать смешанные int и числовые аргументы в функции Postgres 9.1+ Как настроить схему базы данных для системы обмена сообщениями в комплекте с вложениями? MySQL Workbench не может подключиться к локальной службе MySQL на MAC OSX Перемешать столбец между строками XML Oracle: Извлечение определенного атрибута из нескольких повторяющихся дочерних узлов Число групп ActiveRecord с нулями Получить идентификатор записи, только что вставленной в базу данных Java DB (Derby) Ошибка MySQL: Неизвестный столбец в разделе «where clause»

Как реализовать кэширование в Linq для SQL?

Мы только начали использовать LINQ to SQL для работы для нашего DAL, и мы на самом деле не разработали стандарт для модели кэширования. Раньше мы использовали базовый класс DAL, который реализовал свойство кэширования, которое унаследовало все наши классы DAL, но теперь у нас этого нет. Мне интересно, если кто-нибудь придумал «стандартный» подход к кешированию результатов LINQ to SQL?

Мы работаем в веб-среде (IIS), если это имеет значение. Я знаю, что это может оказаться субъективным вопросом, но я все же думаю, что информация была бы ценной.

EDIT: Чтобы уточнить, я не говорю о кэшировании индивидуального результата, я больше использую архитектурное решение, как в том, как вы настраиваете кеширование, чтобы все ваши методы ссылок использовали одну и ту же архитектуру кэширования.

Быстрый ответ. Используйте шаблон репозитория (см. «Проект, созданный с помощью домена Driven Design» от Evans), чтобы получить ваши сущности. Каждый репозиторий будет кэшировать все, что он будет удерживать, в идеале, позволяя каждому экземпляру хранилища обращаться к кешу singleton (каждый поток / запрос будет создавать экземпляр нового репозитория, но может быть только один кеш).

Вышеупомянутый ответ работает только на одной машине. Чтобы использовать это на многих машинах, используйте memcached как ваше решение для кеширования. Удачи!

Кэш результатов запроса LINQ, вероятно, именно то, что вы ищете.

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

Пит.

Это прямо под носом:

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

Теперь просто кеш myResult, так как вы бы кэшировали ваши старые данные DAL.

Я нашел этот пост , который предлагает метод расширения как средство кеширования объектов LINQ.

Я ударился головой о стену для слабых, теперь пытаясь найти хорошее решение для кеширования для Linq2SQL, должно признаться, что я действительно изо всех сил стараюсь найти одноразмерные все …

Шаблон репозитория имеет тенденцию ограничивать полезность Linq, поскольку (без переопределения IQueryable) кеширование должно выполняться вне оператора Linq.

Более того, отложенная загрузка и отслеживание объектов являются большими no-nos, если вы собираетесь кэшировать свои объекты, что делает выполнение обновлений несколько сложнее.

Любой, кому удалось решить эту проблему в дикой природе в рамках высококонкурентного веб-проекта, пожалуйста, звоните и спасите мир! 🙂

Я понимаю, что это, возможно, немного поздний ответ. Тем не менее, вы можете попробовать проект LinqToCache . Он перехватывает SqlDepdency для произвольного запроса LINQ, если это возможно, и обеспечивает активное недействительность кэша через уведомления о запросах на стороне сервера. Запросы должны быть действительными запросами для уведомлений, см. « Создание запроса для уведомления» . Большинство запросов Linq-to-sql соответствуют этим ограничениям, если таблицы указаны с использованием двух частей ( dbo.Table , а не только Table ).

См. Метод GetReferenceData в классе «ReferenceData» в этой статье : http://blog.huagati.com/res/index.php/2008/06/23/application-architecture-part-2-data-access- слой-динамической LINQ /

Он использует кеш страницы asp.net для кэширования данных, полученных с использованием L2S.