2011-01-14 6 views
0

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

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

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

Два запроса позже, мы вызываем переопределенную таблицу <T>, она получает список и вытаскивает объект. Мы меняем его, а затем необходимо привязать кешированный, а затем измененный объект к контексту db. Таким образом, мы называем myContext.Attach (MyObject) и ..... БУМ

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

Есть ли способ вокруг этого ограничения?

ответ

1

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

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

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

Есть еще другие способы сделать это - я нашел книгу LINQ in Action, чтобы быть очень полезной при работе с такими случаями.

+0

Я отмечаю это как ответ, потому что «LinqToSql не поддерживает это» * это * ответ. –

Смежные вопросы