如何使用SqlCacheDependency?
我需要为依赖于此查询的表实现SqlCacheDependency: SELECT Nickname FROM dbo.[User]
。
我为此创建了一个方法:
private IEnumerable GetNicknamesFromCache() { const String cacheValueName = "Nicknames"; var result = HttpRuntime.Cache.Get(cacheValueName) as List; if (result == null) { result = _repository.GetAllNicknames(); var connectionString = ConfigurationManager.ConnectionStrings["RepositoryContext"].ConnectionString; var sqlConnection = new SqlConnection(connectionString); var sqlCommand = new SqlCommand("SELECT Nickname FROM dbo.[User]", sqlConnection); var sqlDependency = new SqlCacheDependency(sqlCommand); HttpRuntime.Cache.Insert(cacheValueName, result, sqlDependency); } return result; }
但是,当我运行我的应用程序时,它不起作用。 我查看了订阅者列表( sys.dm_qn_subscriptions
表)并且没有记录。
我调查了很多时间,并且已经尝试了各种解决方案,但它们对我不起作用:
但它没有帮助。 它仍然无法正常工作。
我如何使其工作?
我已经找到了解决方案。
首先检查是否为您的表启用了Service Broker,并在需要时启用它:
SELECT name, is_broker_enabled FROM sys.databases WHERE name = '' ALTER DATABASE SET enable_broker WITH ROLLBACK IMMEDIATE
接下来在SQL Server中创建新角色sql_dependency_role
, sql_dependency_role
授予权限并向用户授予角色:
EXEC sp_addrole 'sql_dependency_role' GRANT CREATE PROCEDURE to sql_dependency_role GRANT CREATE QUEUE to sql_dependency_role GRANT CREATE SERVICE to sql_dependency_role GRANT REFERENCES on CONTRACT::[https://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_role GRANT VIEW DEFINITION TO sql_dependency_role GRANT SELECT to sql_dependency_role GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sql_dependency_role GRANT RECEIVE ON QueryNotificationErrorsQueue TO sql_dependency_role EXEC sp_addrolemember 'sql_dependency_role', ''
之后添加C#代码以使用SqlCacheDependency
或SqlDependency
(大多数方式相同)。
我已经改变了我的方法,现在它看起来像这样:
private IEnumerable GetNicknamesFromCache() { const String cacheValueName = "Nicknames"; var result = HttpRuntime.Cache.Get(cacheValueName) as List ; if (result == null) { result = _repository.GetAllNicknames(); using (var connection = new SqlConnection(_config.ConnectionString)) { connection.Open(); SqlDependency.Start(_config.ConnectionString); var command = new SqlCommand("SELECT Nickname FROM dbo.[User]", connection); var dependency = new SqlCacheDependency(command); HttpRuntime.Cache.Insert(cacheValueName, result, dependency); command.ExecuteNonQuery(); } } return result; }
现在它工作正常。
不要忘记在创建SqlCacheDependency
或SqlDependency
之前调用SqlDependency.Start
方法并在最后执行命令。
上述就是C#学习教程:如何使用SqlCacheDependency?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1039114.html