我正在做Wicked Code执行SqlSiteMapProvider,除了在VB.NET。SqlSiteMapProvider - OnSiteMapChanged事件永远不会触发?
导致问题的代码有几件事,我不明白应该如何处理它在文章中写的方式。我直接从下面提供的文章中提供了代码。 I've pasted the code here for ease of viewing
第一个问题 - 在创建树(151-160)之前实例化依赖项(第134-137行) - 因此,只要您将依赖关系添加到http.cache(165-167),OnSiteMapChanged事件(242)立即开始 - 使整个过程再次运行 - 并且这个循环多次,直到最终停止。 (我穿过它,并计算了代码循环至少20次,然后我放弃了试图猜测它最后一次点击的时间)
好了,所以要解决这个问题,我只是将代码移到创建依赖项后树是在插入到http.cache之前构建的(因此在添加到http.cache时HasChanged属性为false,并且您不会陷入此psuedo-ifinite-loop中)。
尽管我还是有一个问题 - 每次页面加载时,BuildSiteMap()命中并且第121行检查_root是否为空 - 在第一次构建之后它似乎从不为空......这很好,因为我不想每次都碰到数据库。现在,我在表格中插入一条记录... OnSiteMapChanged事件从不触发。当我在应用程序上浏览网页时,站点地图不会反映新插入的记录 - 单步执行代码,我发现121行的检查仍然导致该功能短路...只有当我 - 启动Visual Studio,这将导致私人_root字段再次变为空,并重新构建站点地图,反映新的更改..(刷新浏览器或启动新的浏览器实例不起作用)...
编辑:从SILLY'SET NOCOUNT'在我的存储过程的顶部'行的问题。显然,这会打破查询通知。看起来这个语句被看作是一个结果集,而第二个实际的查询语句使得导致通知的结果集无效。在添加评论之前,这很难在MSDN文档中找到并且无处可查。希望这可以拯救别人我经历的吝啬鬼!