我试图将SQL4与SQLDependency对象一起使用,运气不佳。
我已创建自己的队列和服务,并希望我的WPF应用程序监视此队列的数据更改,以便我可以更新UI(选择尝试此操作而不是不断查询数据库)。
即使在应用程序启动时,我也会打电话;
SqlDependency.Start(connectString, "NewResultAddedQueue");
我的EF4存储库实现引发了一个异常陈述;
{“在没有使用SqlDependency时 提供期权价值, 必须调用SqlDependency.Start() 在执行添加的命令之前 到SqlDependency实例。“}
首先,我是否尝试实现EF4无法实现的功能,或者是否有其他方法可以让我的应用程序从SQL 2005中侦听数据更改?
答案 0 :(得分:4)
首先,如果您运行了多个WPF应用程序实例,则无法使用自己的队列和服务。 SqlDependency基础结构适用于每个appdomain,如果您共享一个队列,那么实例(appdomains)将窃取彼此之间的通知,从而导致运行时混乱。除非您知道完全您正在做什么,否则只需使用默认实现(即时部署的服务/队列/过程)。
错误信息非常明确:'使用SqlDependency 而不提供选项值 yada yada yada'。因此,您不提供options
value,因此使用默认值:
通知请求选项 这种依赖使用。要使用 null 默认服务。
同时您正在覆盖.Start()
电话中的默认服务。正如我所说的那样,最好让默认情况下工作,直到你确定你了解发生了什么,然后再冒险进入非默认的自定义行为,特别是那些难以理解为The Mysterious Notification的东西。
查看LinqToCache有关如何将查询通知与LINQ一起使用的信息。文章SqlDependency based caching of LINQ Queries解释了这种集成如何与LinqToSQL和LinqToEF一起使用,以及为什么如果涉及LINQ,你实际上不能将它与EF一起使用。