SqlSiteMapProvider - OnSiteMapChanged事件永远不会触发?

时间:2010-01-11 04:03:00

标签: asp.net sitemap sqlsitemapprovider

我正在执行SqlSiteMapProvider的Wicked Code实现,但VB.NET除外。

代码中有一些导致问题的东西,我不明白它应该按照文章中的方式工作。我直接从下面提供的文章中提供了代码。 I've pasted the code here for ease of viewing

第一个问题 - 在创建树之前(第134-137行)实例化依赖性(151-160) - 所以只要将依赖性添加到http.cache(165-167),OnSiteMapChanged事件( 242)立即开火 - 使整个过程再次运行 - 并且这循环多次直到最终某些东西停止。 (我逐步完成它并计算代码循环至少20次,然后我放弃尝试猜测它何时击中最后一次)

好的,所以为了解决这个问题,我只是将代码移动到创建树之后的依赖关系,就在插入http.cache之前(所以当添加到http.cache时,HasChanged属性为false,而你不是' t卡在这个psuedo-ifinite循环中。)

我仍然有一个问题 - 每次页面加载时,BuildSiteMap()命中,第121行检查_root是否为null - 它似乎在第一次构建后永远不会为null ...这很好,因为我很好不想每次都打DB。现在,我在表中插入一条记录...... OnSiteMapChanged事件永远不会触发。当我在应用程序上浏览页面时,站点地图不会反映新插入的记录 - 单步执行代码,我看到第121行的检查仍然导致功能短路...站点地图只会刷新-start Visual Studio,它会使private _root字段再次变为null,并重新构建站点地图,反映新的更改..(刷新浏览器或启动新的浏览器实例不起作用)...

编辑:问题出现在我存储的PROC顶部的'SILLY'设置NOCOUNT上。这显然打破了查询通知。似乎此语句被视为结果集,并且第二个实际查询语句使得导致通知的结果集无效。在我添加评论之前,这在MSDN文档中很难找到并且无处可寻。希望这可以节省其他人我经历过的吝啬鬼!

1 个答案:

答案 0 :(得分:0)

问题出现在我存储的PROC顶部的'SILLY'套装NOCOUNT上。这显然打破了查询通知。似乎此语句被视为结果集,并且第二个实际查询语句使得导致通知的结果集无效。在我添加评论之前,这在MSDN文档中很难找到并且无处可寻。希望这可以拯救别人我经历过的吝啬鬼!