Событие SqlSiteMapProvider - OnSiteMapChanged никогда не срабатывает?

StackOverflow https://stackoverflow.com/questions/2039848

Вопрос

Я делаю то, что Злой Код реализация SqlSiteMapProvider, за исключением VB.NET.

В коде есть несколько вещей, которые вызывают проблемы, и я не понимаю, как это должно работать так, как написано в статье.Я привел код прямо из статьи, приведенной ниже. Я вставил код сюда для удобства просмотра

Первая проблема - зависимость создается ДО (строки 134-137) создания дерева (151-160) - поэтому, как только вы добавляете зависимость в http.cache (165-167), событие OnSiteMapChanged (242) срабатывает немедленно - заставляя весь процесс запускаться снова - и это повторяется много раз, пока, наконец, что-то не останавливает его.(я прошел через это и сосчитал цикл кода не менее 20 раз, прежде чем отказался от попыток угадать, когда он сработал в последний раз)

Хорошо, поэтому, чтобы исправить это, я просто переместил код в create the dependency ПОСЛЕ построения дерева, прямо перед вставкой в http.cache (таким образом, свойство hasChanged имеет значение false при добавлении в http.cache, и вы не застреваете в этом псевдо-ifinite-цикле).

Однако у меня все еще есть проблема - каждый раз, когда загружается страница, запускается BuildSiteMap(), и строка 121 проверяет, не равен ли _root нулю - кажется, он никогда не равен нулю после его первой сборки...это хорошо, потому что я не хочу каждый раз обращаться к базе данных.Теперь я вставляю запись в таблицу...событие OnSiteMapChanged никогда не срабатывает.Когда я просматриваю страницы в приложении, карта сайта не отражает вновь вставленную запись - просматривая код, я вижу, что проверка в строке 121 по-прежнему вызывает короткое замыкание функции...Карта сайта обновится, только если я повторно запущу Visual Studio, что приведет к тому, что поле private _root снова станет нулевым, и заново создаст карту сайта, отражающую новые изменения..(обновление браузера или запуск новых экземпляров браузера не работает)...

Редактировать:ПРОБЛЕМА ВОЗНИКЛА ИЗ-ЗА ГЛУПОЙ СТРОКИ "SET NOCOUNT ON" В ВЕРХНЕЙ ЧАСТИ МОЕЙ СОХРАНЕННОЙ ПРОЦЕДУРЫ.ПО-ВИДИМОМУ, ЭТО ПРЕРЫВАЕТ УВЕДОМЛЕНИЕ О ЗАПРОСЕ.Похоже, что этот оператор рассматривается как результирующий набор и что второй, фактический оператор запроса делает недействительным результирующий набор, приводящий к уведомлению.Это было очень трудно найти, и нигде в документации MSDN этого не было, пока я не добавил комментарий.Надеюсь, это спасет кого-нибудь еще от тех страданий, через которые пришлось пройти мне!

Это было полезно?

Решение

ПРОБЛЕМА ВОЗНИКЛА ИЗ-ЗА ГЛУПОЙ СТРОКИ "SET NOCOUNT ON" В ВЕРХНЕЙ ЧАСТИ МОЕЙ СОХРАНЕННОЙ ПРОЦЕДУРЫ.ПО-ВИДИМОМУ, ЭТО ПРЕРЫВАЕТ УВЕДОМЛЕНИЕ О ЗАПРОСЕ.Похоже, что этот оператор рассматривается как результирующий набор и что второй, фактический оператор запроса делает недействительным результирующий набор, приводящий к уведомлению.Это было очень трудно найти, и нигде в документации MSDN этого не было, пока я не добавил комментарий.Надеюсь, это спасет кого-нибудь еще от тех страданий, через которые пришлось пройти мне!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top