0

私はとても困惑しています。

このオープンソースのスニペットを使用しています。SQL Server にトリガーのないテーブルがありますが、SQLCacheDependency は正常に機能しています。それを機能させるには、テーブルにトリガーが必要だと思いましたか?!

                DateTime localFileTimeStamp = DateTime.Now; 
                DateTime fileTimeStampInDB;
                string cacheKey = string.Format("ImageId_{0}", 1);
                object o = Utils.Cache.Get(cacheKey);
                if (null == o)
                {
                    // get timestamp from DB
                    SqlCacheDependency dep;
                    fileTimeStampInDB = DataLayer.GetTimeStamp(1, out dep);
                    Utils.Cache.Insert(cacheKey, fileTimeStampInDB, dep, Cache.NoAbsoluteExpiration,
                        Cache.NoSlidingExpiration);
                    //, CacheItemPriority.Normal);
                    //new CacheItemRemovedCallback(WebUtils.CacheItemRemovedCallback));
                }

timeupdated フィールドを getdate() に設定するたびに、オブジェクト o が再び null であることをコードが検出します。これは、古くなった後にキャッシュから削除する必要があるためですが、なぜ機能しているのでしょうか? SQLCacheDependency のチュートリアルを読み始めたばかりなので、読んでいる間に何かを見逃したのかもしれません。

編集:彼らは使用しています

SqlCacheDependency dependency = new SqlCacheDependency(command);

これにはトリガーは必要ないと思います。

このアプローチが嫌いで、他のアプローチを好む場合は、お気軽に共有してください。

4

1 に答える 1

0

いいえ、トリガー自体は必要ありません。それはすべてQuery Notificationsで行われます。その記事を読んで、ADO.NET を使用してクエリ通知を設定できる 3 つの方法について説明します。

基になる結果セットへの変更を通知するのは、これらのクエリ通知です。

于 2010-02-27T11:16:48.607 に答える