【问题标题】:Entity Framework - Underlying data (in database) change notification实体框架 - 基础数据(在数据库中)更改通知
【发布时间】:2011-01-31 15:21:14
【问题描述】:

到目前为止,我正在使用实体框架来操作数据库中的数据。

但是,我希望有多个应用程序同时处理数据(并发版本)。

有没有办法在数据库中的数据发生变化时得到通知?

我看到了一个使用 DML 触发器的解决方案,但我想知道是否有其他方法可以实现这一目标,如果有,最好的解决方案是什么。

问候,

网卡

编辑

可能我的问题还不够清楚,我试着举例说明一下。

  • Application#1 正在数据库#1 上使用实体框架
  • Application#2 也在数据库#1 上使用实体框架
  • Application#1 更改了实体模型,这反映在数据库#1 的基础表中的更改
  • 我希望应用程序 #2 收到有关此更改的通知,以便它可以拥有一致/最新的数据。

【问题讨论】:

标签: entity-framework c#-4.0 notifications


【解决方案1】:

也许您应该考虑在您的应用程序中使用 EF。 EF 的上下文应该使用尽可能短的时间:

  • 创建上下文
  • 加载数据
  • 修改数据
  • 保存数据
  • 删除上下文

由于内部实现(IdentityMap、UnitOfWork)长期存在的上下文不是一个好的选择,并且在短期存在的上下文中,您根本不希望提及行为。即使在桌面应用程序中,您也应该使用每个表单的上下文等方法。您加载数据,将数据呈现给您的用户,直到那时只有用户才能修改数据并按下保存按钮 - 以某种方式处理并发问题(时间戳)是应用程序的责任。自动修改作为运行工作单元一部分的数据是一个非常糟糕的主意 - 如果用户已经修改了数据怎么办?你会覆盖他的更改吗?

编辑:

你可以阅读更多关于ObjectContexthere的实施。

我可以想象需要向客户端应用程序发送数据更新通知的场景。它可以是只读的实时数据显示——例如股票交易信息。但在这种情况下,你需要更强大的东西。这不是客户端调用 ORM 获取数据的场景,而是客户端订阅某些服务/中间层处理数据检索和快速更改通知的场景。

对于只需要以半实时方式刷新数据的简单场景,您可以使用轮询 - 您的客户端将在几秒钟内再次调用查询并使用 StoreWins 策略。任何通知策略都超出了 EF 的范围 - 您必须将其实现为触发器、sql 依赖项、发布订阅模式或其他内容。即使有通知,您也只能处理某些事件并重新查询数据。

同样,如果您想通过轮询减少数据传输,您需要一些服务/中间层来允许某种程度的缓存(您也可以尝试 WCF 数据服务)。

【讨论】:

  • 这个答案完全是题外话。您对投票的回答正是提出这个问题的原因。防止轮询。
【解决方案2】:

在数据库级别,您可以在表上放置一个timestamp 列,并使用它来判断某行自检索后是否已更新。这可以按照您的建议通过触发器进行检查,或者通过 C# 代码中的监控系统进行检查,或者如果您只是想防止覆盖更改,您可以编写检查时间戳的更新存储过程,并使用它们来保存您的实体。

无论您选择哪个选项,您都必须提前决定如何管理冲突。

Timestamp-based concurrency control

【讨论】:

  • +1 以获得最佳方法。您必须使用时间戳,这是并发检查的最佳方法,现在 EF 4.2 确实自动支持。
【解决方案3】:

您可以将数据库缓存依赖项用于此类事情。

http://msdn.microsoft.com/en-us/library/system.web.caching.sqlcachedependency.aspx
http://msdn.microsoft.com/en-us/magazine/cc188758.aspx

虽然与桌面/服务应用程序相比,当您拥有 Web 应用程序时会稍微复杂一些。

【讨论】:

    【解决方案4】:

    我不知道您使用的是哪个提供商。无论如何,Devart 和 ODP 都支持 DB Notification。对于 Devart,您可以看到以下链接 OracleDependency Class

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多