0

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

代码有一些问题会导致问题,我不明白它应该如何按照文章中所写的方式工作。我直接从下面提供的文章中提供了代码。为了方便查看,我在这里粘贴了代码

第一个问题 - 在创建树之前(第 134-137 行)实例化依赖关系(151-160) - 因此,只要将依赖关系添加到 http.cache(165-167),OnSiteMapChanged 事件(242)就会触发立即 - 使整个过程再次运行 - 并且循环多次,直到最终某些东西使它停止。(在我放弃尝试猜测它最后一次命中之前,我单步执行并计算了代码循环至少 20 次)

好的,所以为了解决这个问题,我只是将代码移动到在树构建之后创建依赖项,就在插入到 http.cache 之前(所以当添加到 http.cache 时,HasChanged 属性是假的,你不会卡住在这个伪无限循环中)。

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

编辑:这个问题源于我存储的过程顶部的一个愚蠢的“SET NOCOUNT ON”行。显然这会破坏查询通知。似乎该语句被视为结果集,而第二个实际查询语句使结果集无效,从而导致通知。在我添加评论之前,这很难在 MSDN 文档中找到并且无处可寻。希望这能拯救别人我经历的吝啬鬼!

4

1 回答 1

0

问题源于我存储过程顶部的一条愚蠢的“SET NOCOUNT ON”行。显然这会破坏查询通知。似乎该语句被视为结果集,而第二个实际查询语句使结果集无效,从而导致通知。在我添加评论之前,这很难在 MSDN 文档中找到并且无处可寻。希望这能拯救别人我经历的吝啬鬼!

于 2010-01-26T20:27:43.003 回答