Кэширование данных Linq2Sql - PullRequest
0 голосов
/ 14 января 2011

У меня есть веб-приложение. Это делает тонну чтения данных на небольших таблицах и нескольких операций записи. Я хочу вытащить целые таблицы данных в кеш и запрашивать кешированные данные. Я переопределяю метод Table <T> () контекста, чтобы мы могли обслуживать кеш вместо живых данных. Прекрасно работает для вставок и поддерживает доступ к данным модульного тестирования. Потрясающие.

Итак, мы начали использовать данные кеша и обнаружили, что обновления и удаления не работают.

Мы извлекаем объект из базы данных, бросаем его в список <T>, помещаем этот список в httpCache, а затем отбрасываем контекст данных.

Через два запроса мы вызываем переопределенную таблицу <T>, она получает список и вытаскивает объект. Мы изменили его, а затем нужно прикрепить кешированный, а затем изменили объект в контексте БД. Поэтому мы вызываем myContext.Attach (myobject) и ..... BOOM

Была предпринята попытка присоединить или Возможно, добавьте объект, который не является новым будучи загруженным из другого DataContext. Это не поддерживается.

Есть ли способ обойти это ограничение?

1 Ответ

1 голос
/ 15 января 2011

Похоже, ваши кэшированные объекты все еще привязаны к исходному DataContext , с которым они запрашивались. Одним из способов решения этой проблемы (который нарушает правило оптимальной практики сохранения короткого жизненного цикла DataContext) является кэширование DataContext вместе с вашими сущностями, а затем использование этого кэшированного контекста, когда вы хотите удалить или обновить кэшированные сущности.

Вы упоминаете, что кэшированные объекты используются «двумя запросами позже» - если все эти запросы происходят в течение короткого промежутка времени, то нарушение правила короткого жизненного цикла может не быть проблемой.

Другой вариант - кэшировать объекты, которые основаны на сущностях, но являются не сущностями, и когда пришло время обновить сущности значениями, хранящимися в кешированных объектах, не являющихся сущностями запросить чистые сущности в новом DataContext, обновить эти сущности и затем сохранить во вновь созданном DataContext.

Есть и другие способы сделать это - я обнаружил, что книга LINQ в действии очень полезна в таких случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...