ASP.NET MVC <OutputCache> SqlDependency (CommandNotification?) С запросами LINQ
Я использую запросы LINQ в своем приложении ASP.NET MVC и хочу использовать OutputCache в некоторых моих действиях.
Я слышал, это должно быть возможно с помощью CommandNotifications. Но они, кажется, идут только на самодельные команды SQLC, или я ошибаюсь?
Могу ли я вручную указать серверу SQL отправлять уведомления SQLDependency при изменении определенных таблиц? И если да, как я могу прикрепить их к OutputCache?
Еще один побочный вопрос: можете ли вы сделать это с сильно типизированными представлениями?
Заранее спасибо...
2 ответа
Вы можете сделать снимок проекту LinqToCache. Он выполняет именно то, что вы просите, перехватывает SqlDependency к любому запросу LINQ, если запрос, отправляемый на SQL Server, соответствует ограничениям уведомления о запросах. Для Linq-to-SQL это в основном состоит из указания полного имени из двух частей для таблиц в конструкторе модели (т.е. dbo.Table
не только Table
). К сожалению, для Linq-to-EF способ, которым EF выбирает форматирование запроса, несовместим с ограничениями QN.
Но они, кажется, идут только на самодельные команды SQLC, или я ошибаюсь?
Я бы сказал, что они полезны только для "самостоятельно созданных" команд, потому что это единственные, о которых вы можете знать заранее. Если вы хотите создать уведомление для определенного запроса LINQ, тогда вам нужно просто вызвать метод в коде вместе с запросом.
Могу ли я вручную указать серверу SQL отправлять уведомления SQLDependency при изменении определенных таблиц?
Конечно. Сделать уведомление о:
SELECT * FROM TABLENAME;
И если да, как я могу прикрепить их к OutputCache?
Создайте команду, создайте зависимость для кэша и укажите ее при добавлении в кэш. Инициализируйте уведомления о зависимостях в global.asax.cs как обычно.
Вы можете сделать это с сильно типизированными представлениями тоже?
Не имеет смысла. В MVC вы не должны делать доступ к данным в представлении.