0

我正在尝试将 EF4 与 SQLDependency 对象一起使用,但运气不佳。

我创建了自己的队列和服务,并希望我的 WPF 应用程序监视此队列的数据更改,以便我可以更新 UI(选择尝试此操作而不是不断查询数据库)。

即使在应用程序启动时我打电话;

SqlDependency.Start(connectString, "NewResultAddedQueue");

我的 EF4 存储库实现抛出异常说明;

{“在不提供选项值的情况下使用 SqlDependency 时,必须在执行添加到 SqlDependency 实例的命令之前调用 SqlDependency.Start()。”}

首先,我是在尝试实现 EF4 无法实现的目标,还是可以采取另一种方法让我的应用程序侦听 SQL 2005 的数据更改?

4

1 回答 1

4

首先,如果您有多个 WPF 应用程序实例正在运行,则不能使用自己的队列和服务。SqlDependency 基础结构适用于每个应用程序域,如果您共享一个队列,那么实例(应用程序域)将彼此窃取通知,从而导致运行时混乱。除非你很清楚知道自己在做什么,否则只需使用默认实现(即时部署的服务/队列/过程)。

错误消息非常清楚:'当使用 SqlDependency而不提供选项值yada yada yada'。因此您不提供optionsvalue,因此使用默认值:

此依赖项要使用的通知请求选项。null 使用默认服务

同时,您正在覆盖.Start()调用中的默认服务。正如我所说,最好先让默认情况下工作,直到你确定你了解发生了什么,然后再冒险进入非默认自定义行为,特别是像神秘通知这样难以理解的东西。

查看LinqToCache,了解如何将查询通知与 LINQ 一起使用。LINQ 查询的基于 SqlDependency 的缓存一文解释了这种集成如何与 LinqToSQL 和 LinqToEF 一起工作,以及为什么在涉及 LINQ 的情况下实际上不能将它与 EF 一起使用。

于 2010-11-01T20:35:33.627 回答