Linq to sql SqlDependency和表更新不刷新DataContext

Linq to sql SqlDependency和表更新不刷新DataContext,linq-to-sql,c#-4.0,sqldependency,Linq To Sql,C# 4.0,Sqldependency,我在项目中实现SqlDependency时遇到问题 我正在WCF服务中使用SqlDependency。WCF服务然后在内存缓存中保存所有表的所有结果,以便获得巨大的速度增益。一切似乎都很正常,除了在更新表行时。如果我在表中添加或删除一行,DataContext将被刷新,缓存将毫无问题地失效。但是当涉及到表行更新时,什么都没有发生,缓存没有失效,当我在调试模式下查看DataContext的内容时,似乎没有发生任何更改 以下是我正在使用的代码(请注意,我正在使用System.Runtime.Cach

我在项目中实现SqlDependency时遇到问题

我正在WCF服务中使用SqlDependency。WCF服务然后在内存缓存中保存所有表的所有结果,以便获得巨大的速度增益。一切似乎都很正常,除了在更新表行时。如果我在表中添加或删除一行,DataContext将被刷新,缓存将毫无问题地失效。但是当涉及到表行更新时,什么都没有发生,缓存没有失效,当我在调试模式下查看DataContext的内容时,似乎没有发生任何更改

以下是我正在使用的代码(请注意,我正在使用System.Runtime.Caching对象):


那么,这是SqlDependency的一个限制,还是我在这个过程中做了一些错误/遗漏了一些东西?

我认为问题在于,尽管您在设置命令对象时做了所有的工作,但您仍然:

cmd.ExecuteNonQuery();
result = query.ToList();
它将使用SQL命令并丢弃结果,然后LINQ to SQL将通过query.ToList()在内部生成它自己的结果。谢天谢地,您可以让LINQ to SQL执行您自己的命令并为您翻译结果,因此请尝试将这两行替换为:

results = db.Translate<T>(cmd.ExecuteReader());
results=db.Translate(cmd.ExecuteReader());
SqlDependency.Start(
    ConfigurationManager.ConnectionStrings[myConnectionString].ConnectionString);
cmd.ExecuteNonQuery();
result = query.ToList();
results = db.Translate<T>(cmd.ExecuteReader());