2012-05-17 3 views
2

Я хочу знать, как/если можно использовать SQL Service Broker в EF4.x или EF5?Entity Framework с SQL Service Broker

Сценарий: Скажем, у меня есть список продуктов, я не хочу загружать это из db каждый раз, когда клиент посещает страницу. Конечно, я могу кэшировать страницу, но если менеджер товаров добавит новый продукт, он не появится сразу же, пока не истечет срок кеша или не изменится параметр запроса.

Решение: В SQL мы можем Enable_Broker и в веб-приложении начать соединение с SqlDependency. SQL отправит уведомления в наше веб-приложение. Поэтому у нас есть умная система «кэширования». Все это имеет смысл, если мы сможем использовать этот смарт-кеш. Нам не нужно посещать SQL db 1000 раз, когда на этой странице кликается 1000 клиентов. Но как только произойдет изменение в db, первый клиент, посетивший страницу в то время, увидит отражение. Мы получаем лучшее из обоих миров.

Редакция: Entity Framework не раскрывает эту способность. Или я не знаю об этом? Поскольку SQL 2005 и ASP.NET 2.0 уже получили эту возможность. EF 4/5 не может пропустить эту важную функцию, не так ли? Мне нужен эксперт, чтобы помочь мне в этом вопросе.

мне довелось найти хак по этой ссылке:

http://www.codeproject.com/Articles/233770/AutoRefresh-Entity-Framework-data-using-SQL-Server

Однако, он более или менее «недокументированные магии» путь, и у него есть какие-то неизвестные ограничения (ограничение связи с этой страницы имеет были удалены, поэтому я не знаю, что это такое). Таким образом, для меня это недостаточно надежно, и я не удивлюсь, если он внезапно не сработает после нового EF-патча. Есть ли более «официальный» способ сделать это? Благодаря!

ответ

1

См. LinqToCache, что позволяет кэшировать через SqlDependency произвольные запросы LINQ. Когда дело доходит до EF, это сводится к тому, что SQL-запрос, созданный EF, соответствует ограничениям для уведомлений о запросах. В прошлый раз, когда я проверял, EF безвозмездно добавлял подзапрос в запрос и, таким образом, делал запросы незаметными. Я слышал, что последний EF лучше, и он может работать, но я сам его не тестировал.

1

.Net предоставляет способы аннулирования кеша, если вы хотите, вы можете настроить свою страницу обновления, которую менеджер продуктов использует, чтобы аннулировать кеш при обновлении. Может быть проще, чем создать сервис-брокера

+0

Вы имели в виду страницы cache by time и param? Если это то, что вы имели в виду, я упомянул об этом в первом абзаце. Это своего рода вещь .net 1.0. Я хочу, чтобы уведомление об интеллектуальном обновлении из брокерского сервиса, как я могу, с обычным веб-приложением sql db + .net 2.0 ... – Tom

+1

Я имею в виду, что вы можете аннулировать кеш страницы, когда ваша страница обновления будет использоваться. Как обычно работает кеширование. Вам не нужно ждать, чтобы аннулировать кеш после N секунд. – bwbrowning

+1

Хм. Вероятно, менеджер по продукции накачивает данные в sqldb через ssis или что-то в этом роде. Он может не использовать веб-приложение для обновления цен на несколько тысяч продуктов. В этом случае веб-приложение не знает, что происходит в sql db. Кроме того, у нас может быть более одного приложения, обращающегося к db ... – Tom

1

имеет некоторые неизвестные ограничения (ограничение связи с этой страницы были удалены, так что я не знаю, что они)

Я только установил это сломанной ссылке. Это ничего загадочного, просто ссылка на MSDN article "Creating a Query for Notification".

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