sql server 2008 - зависимость sqlcache без триггера?

Я так озадачен.

Я использую этот фрагмент с открытым исходным кодом. У меня есть таблица без каких-либо триггеров в 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);

и я думаю, что это не требует триггеров.

Если вам не нравится этот подход и вы предпочитаете какой-либо другой подход, поделитесь им.


person TPR    schedule 27.02.2010    source источник


Ответы (1)


Нет, триггеры как таковые не нужны. Все это делается в уведомлениях о запросах. Прочтите эту статью, в ней объясняются 3 способа настройки уведомлений о запросах с помощью ADO.NET.

Именно эти уведомления о запросах уведомляют об изменениях в базовом наборе результатов.

person AdaTheDev    schedule 27.02.2010