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