我正在将EF 6与SQL Server 2012一起使用。
我正在尝试使用SqlDependency
刷新类库(DLL)中的缓存数据。
根据我找到的指南,我有以下内容,但似乎不起作用,我没有错。
- 已在数据库上启用broker服务
- 创建了代理队列和服务
使用sa
登录。
我正在通过单元测试代码测试这整件事,不确定通知是否不是即时的,我在SqlDependency.OnChange
中的断点从未触发过。
但即使我故意放慢帖子的更改速度,OnChange
仍然没有被触发。
一旦我进行了相关的数据更改,我如何知道SQL Server正在数据库中生成通知?
更新:
最初,我在SQL日志中发现"需要主密钥加密"。通过创建该密钥,日志不再发生,但OnChange
仍然不会被触发。
经过多次试验,并基于一篇重要文章:http://www.codeproject.com/Articles/12335/Using-SqlDependency-for-data-change-events
1) SqlDependency初始化后,必须执行SqlCommand,只需调用sqlCmd.ExecuteNonQuery()即可。
2) 触发OnChange事件后,必须删除事件处理,重新创建新的SqlCommand和SqlDependency,重新绑定事件处理,并遵循规则#1