sql server 2008 - sqlcachedependency без триггера?
-
23-09-2019 - |
Вопрос
Я так озадачен.
Я использую этот фрагмент с открытым исходным кодом.У меня есть таблица без каких-либо триггеров в 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);
и я предполагаю, что для этого не требуются триггеры.
Пожалуйста, не стесняйтесь поделиться, если вам не нравится этот подход и вы предпочитаете какой-то другой.
Решение
Нет, вам не нужны триггеры как таковые.Все это делается на Уведомления о запросах.Прочтите эту статью, в ней объясняются 3 способа настройки уведомлений о запросах с помощью ADO.NET.
Именно эти уведомления о запросах уведомляют об изменениях в базовом результирующем наборе.