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 вы не должны делать доступ к данным в представлении.

Другие вопросы по тегам