SqlSiteMapProvider - событие OnSiteMapChanged никогда не запускается?

Я занимаюсь реализацией Wicked Code для SqlSiteMapProvider, за исключением VB.NET.

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

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

Итак, чтобы исправить это, я просто переместил код для создания зависимости ПОСЛЕ того, как построено дерево, прямо перед вставкой в ​​http.cache (поэтому свойство HasChanged имеет значение false при добавлении в http.cache, и вы не застряли в этой псевдо-ифинитной петле).

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

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

1 ответ

Решение

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

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