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

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

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

数据库中的数据发生变化时,是否有通知方式?

我看到一个使用DML触发器的解决方案,但我想知道是否有其他方法来实现,如果是的话,最好的解决方案是使用.

问候,

尼克

编辑

也许我的问题不够清楚,我会尝试以一个例子来说明.

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

解决方法

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

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

由于内部实现(IdentityMap,UnitOfWork)长期的生活环境不是一个不错的选择,而且生活环境短,你根本不想提及行为.即使在桌面应用程序中,您应该使用像每个窗体的上下文方法.您加载数据,您向用户提供数据,直到那时只有用户可以修改数据并按下保存按钮 – 应用程序负责处理并发问题(时间戳).作为运行工作单元的一部分的数据的自动修改是非常糟糕的主意 – 如果用户已经修改过的数据怎么办?你会覆盖他的变化吗

编辑:

您可以阅读有关ObjectContext here的更多内容.

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

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

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

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...