实体框架 - 基础数据(在数据库中)更改通知

Nic*_*las 16 notifications entity-framework c#-4.0

到目前为止,我正在使用Entity Framework来成功操作数据库中的数据.

但是,我希望有多个应用程序同时播放数据(并发版).

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

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

问候,

尼克

编辑

也许我的问题不够明确,我会试着用一个例子来说明.

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

Lad*_*nka 5

也许你应该考虑在你的应用程序中使用EF.EF的上下文应尽可能用于最短的时间段:

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

由于内部实现(IdentityMap,UnitOfWork),长生活环境不是一个好的选择,并且生活环境较短,你根本不需要提到的行为.即使在桌面应用程序中,您也应该使用类似上下文的方法.您加载数据,向用户呈现数据,直到那时只有用户可以修改数据并按下保存按钮 - 应用程序有责任以某种方式处理并发问题(时间戳).作为运行工作单元的一部分的数据的自动修改是非常糟糕的 - 如果用户已经修改了数据怎么办?你会覆盖他的变化吗?

编辑:

你可以在ObjectContext 这里阅读更多有关实施的内容.

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

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

再次,如果您想通过轮询减少数据传输,您需要一些服务/中间层,这将允许某种级别的缓存(您也可以尝试WCF数据服务).

  • 这个答案完全偏离主题。您对投票的回答正是提出这个问题的原因。防止轮询。 (2认同)