NCache作为实体框架二级缓存不与数据库同步

时间:2016-06-20 05:23:52

标签: c# entity-framework sql-server-2014 ncache

使用NCache 4.6作为EF 6.1.3二级缓存,SqlDependency不起作用。 (它无法检测我在SQL服务器中直接进行的更改。当使用EF向数据库添加或删除实体时,也不会更新缓存或使其无效。虽然它检测到更新实体)

我在我的计算机上安装了NCache:IP 192.168.56.1和SQL Server 2014 in vbox with IP:192.168.56.101

使用their site的说明并对其进行自定义以满足我的IP&用户,我按照SQL执行:

ALTER DATABASE NORTHWND SET ENABLE_BROKER with rollback immediate;
GO
--Select is_broker_enabled from sys.databases where name ='NORTHWND'

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO user1
GRANT CREATE QUEUE TO user1
GRANT CREATE SERVICE TO user1
GRANT CREATE PROCEDURE TO user1


CREATE QUEUE "NCacheSQLQueue-192.168.56.1";
CREATE SERVICE "NCacheSQLService-192.168.56.1" ON QUEUE."NCacheSQLQueue-192.168.56.1"([http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification]);

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO user1;
GRANT RECEIVE ON "NCacheSQLQueue-192.168.56.1" TO user1;
GRANT RECEIVE ON QueryNotificationErrorsQueue TO user1;
GRANT SEND ON SERVICE :: "NCacheSQLService-192.168.56.1" to user1;

此外,select * from sys.dm_qn_subscriptions表示没有人订阅。

1 个答案:

答案 0 :(得分:1)

事实证明我需要运行ALTER AUTHORIZATION ON DATABASE::[NORTHWND] TO user1;

这是我做的:

1-恢复了一个新的Northwind数据库。

2跟随SQL:

ALTER DATABASE NORTHWND SET ENABLE_BROKER with rollback immediate;
GO

GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sa
GRANT CREATE QUEUE TO sa
GRANT CREATE SERVICE TO sa
GRANT CREATE PROCEDURE TO sa

ALTER AUTHORIZATION ON DATABASE::[NORTHWND] TO sa

请注意,在此查询中,我故意省略了CREATE QUEUE "NCacheSQLQueue-192.168.56.1";以及之后的所有查询。

另外,我发现Entity Framework Profiler与NCache或SQL Dependency不兼容,所以我禁用了它。