2010-01-11 2 views
0

Я делаю реализацию Wicked Code SqlSiteMapProvider, за исключением VB.NET.SqlSiteMapProvider - событие OnSiteMapChanged никогда не срабатывает?

Есть несколько вещей с кодом, вызывающим проблемы, и я не понимаю, как он должен работать так, как написано в статье. Я предоставил код прямо из статьи, приведенной ниже. I've pasted the code here for ease of viewing

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

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

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

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

ответ

0

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

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