2011-05-27 32 views
0

我有两个应用程序(网站和桌面应用程序),使用实体框架,使用一个共同的SQL服务器数据库。他们实现了工作单元模式,并将会话保留在会话中或相关的线程中。我的问题是如何更新另一个应用程序的上下文,当一个应用程序更新数据库上的东西? 举一个例子,假设windows服务已经在表中添加了一些行。 Web应用程序上下文如何在插入的同时获取该应用程序上下文。实体框架为两个应用程序和公用数据库

+2

这听起来像是一个糟糕的设计。一个Web应用程序应该只有一个上下文,只要请求最后一个,然后应该放弃它。我不知道有什么方法可以与上下文同步。这不仅仅是EF的工作原理。 – sra 2011-05-27 05:44:20

+0

那不是我想要的。我不想同步到上下文,只需要在其他应用程序更新数据库时更新上下文。 – 2011-05-27 05:51:19

+2

我不认为这会起作用。上下文不可能知道到目前为止发生了什么变化并且查询了所有内容。您将浪费更多时间用更新建议来创建新的上下文。 – sra 2011-05-27 05:57:06

回答

1

Web应用程序场景中的上下文应仅保留每个请求。从我所看到的情况来看,你必须从数据库级别实现一些事件,因为这似乎是常见的事情。这可以通过使用触发器

在您的方案来完成,你应该以下步骤(只是在做画板方案)执行

  • 添加触发器在每个表,这将基本上抛出事件数据库级别应用程序层。
  • 以某种方式将这些触发器抽取到存储过程中,以便您可以与EF
  • 一起使用此后,实现一个层,该层位于主要负责通知用户其他应用程序更改数据库的应用程序和然后通过单击按钮更新请求(从而更新上下文)。基本上数据库级触发器触发相应UI上的某些内容。

工作的肉在于第三点。你可以用很多方式实现它。另一种方法是编写一个服务来轮询另一个服务(它接受来自数据库触发器的警报)以检查修改。所以逻辑分离可以像db - >服务,接受更改通知 - >服务轮询通知服务 - >应用程序

上面的工作逻辑上和理论上,但希望它可以帮助你,我会热衷于了解你如何去做这件事。

相关问题