【问题标题】:Entity Framework for two applications and common database两个应用程序和通用数据库的实体框架
【发布时间】:2011-05-27 05:37:00
【问题描述】:

我有两个使用实体框架的应用程序(Web 和桌面应用程序),它们使用一个通用的 sql server 数据库。他们实现了工作单元模式,并将上下文保存在会话或相关线程中。我的问题是当一个应用程序更新数据库上的某些内容时如何更新另一个应用程序的上下文? 例如,假设 Windows 服务向表中添加了一些行。 Web 应用程序上下文如何在插入的同时获取它。

【问题讨论】:

  • 这对我来说听起来是个糟糕的设计。 Web 应用程序应该只在请求持续时才具有上下文,然后应该将其丢弃。我不知道有什么方法可以将上下文与另一个同步。这根本不是 EF 的工作方式。
  • 这不是我想要的。我不想同步到上下文,只需要在另一个应用程序在数据库中更新某些内容时更新上下文。
  • 我认为这行不通。上下文不可能知道到目前为止发生了什么变化并查询所有这些。您将在更新建议上浪费更多时间来创建新上下文。
  • 您所要求的不应完成。数据库不应更新更改的客户端。相反,应该构建客户端以尽可能从数据库中获取数据,并在出现并发异常时处理它们。

标签: sql sql-server entity-framework unit-of-work


【解决方案1】:

Web 应用程序场景中的上下文应仅根据请求持续存在。据我所知,您必须从数据库级别将某些东西作为事件实现,因为这似乎是常见的地方。这可以使用触发器来完成

在您的场景中,您应该执行以下步骤(只是做一个绘图板场景)

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

工作的重点在于第三点。您可以通过多种方式实现它。替代方案是编写一个服务来轮询另一个服务(它接受来自 db 触发器的警报)以检查修改。所以逻辑分离可能就像 db --> 接受更改通知的服务 --> 轮询通知服务的服务 --> 应用程序

以上内容在逻辑上和理论上都有效,但希望对您有所帮助,我很想知道您是如何做到这一点的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2011-09-13
    • 2015-01-15
    相关资源
    最近更新 更多