EF4和SQLDependency对象

时间:2010-11-01 20:01:26

标签: sql-server-2005 entity-framework-4 sqldependency

我试图将SQL4与SQLDependency对象一起使用,运气不佳。

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

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

SqlDependency.Start(connectString, "NewResultAddedQueue");

我的EF4存储库实现引发了一个异常陈述;

  

{“在没有使用SqlDependency时   提供期权价值,   必须调用SqlDependency.Start()   在执行添加的命令之前   到SqlDependency实例。“}

首先,我是否尝试实现EF4无法实现的功能,或者是否有其他方法可以让我的应用程序从SQL 2005中侦听数据更改?

1 个答案:

答案 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一起使用。