0

VB.NETを除いて、SqlSiteMapProviderのWickedCode実装を行っています。

問題を引き起こしているコードにはいくつかのことがあり、記事に書かれているようにコードがどのように機能するのかわかりません。以下の記事から直接コードを提供しました。見やすくするためにここにコードを貼り付けました

最初の問題-依存関係はツリーが作成される前にインスタンス化されます(行134-137)(151-160)-依存関係をhttp.cache(165-167)に追加するとすぐに、OnSiteMapChangedイベント(242)が発生しますすぐに-プロセス全体を再度実行します-これは、最終的に何かが停止するまで何度もループします。(私はそれをステップスルーし、コードが最後にヒットしたときを推測することをあきらめる前に、少なくとも20回ループするコードを数えました)

OK、これを修正するために、ツリーが構築された後、http.cacheに挿入する直前に依存関係を作成するようにコードを移動しました(したがって、http.cacheに追加するときにHasChangedプロパティはfalseであり、スタックしませんこの疑似ifinite-loopで)。

しかし、まだ問題があります-ページが読み込まれるたびに、BuildSiteMap()がヒットし、121行目で_rootがnullでないかどうかがチェックされます-最初にビルドされた後はnullになることはないようです...これは私がしないので良いことです毎回DBをヒットしたい。ここで、テーブルにレコードを挿入します...OnSiteMapChangedイベントは発生しません。アプリでページを閲覧すると、サイトマップに新しく挿入されたレコードが反映されません。コードをステップスルーすると、121行目のチェックで関数が短絡していることがわかります...サイトマップは、次の場合にのみ更新されます。 -Visual Studioを起動します。これにより、プライベート_rootフィールドが再びnullになり、新しい変更を反映してサイトマップが再構築されます。(ブラウザの更新または新しいブラウザインスタンスの起動は機能しません)...

編集:私のストアドプロシージャの上部にある愚かな「SETNOCOUNTON」ラインからの問題。明らかに、これはクエリ通知を壊します。このステートメントは結果セットと見なされ、2番目の実際のクエリステートメントは結果セットを無効にして通知を生成するようです。これは見つけるのが非常に難しく、コメントを追加するまで、MSDNドキュメントのどこにもありませんでした。これが私が経験したけちな人を救うことを願っています!

4

1 に答える 1

0

ストアドプロシージャの上部にあるSILLYの「SETNOCOUNTON」ラインから発生した問題。明らかに、これはクエリ通知を壊します。このステートメントは結果セットと見なされ、2番目の実際のクエリステートメントは結果セットを無効にして通知を生成するようです。これは見つけるのが非常に難しく、コメントを追加するまで、MSDNドキュメントのどこにもありませんでした。これが私が経験したけちな人を救うことを願っています!

于 2010-01-26T20:27:43.003 に答える