如何知道数据是否已更改

how to know if data has changed

如果您在使用同一数据库的不同客户端上有一个桌面应用程序,如果一个客户端更改了数据,您如何通知其他客户端。假设您作为 1 号客户正在查看具有不同客户的数据网格,而 2 号客户更新了您在数据网格中查看的其中一个客户的名称。 1 号客户如何知道数据库的变化?我不认为解决方案是将每一秒都拉到服务器。那么会有什么选择呢?

你可以看看Observer Pattern:

Defines a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

因此,基本上,只要客户端按下保存(或任何其他更改数据的操作),您的服务器就会向其客户端发送通知。然后客户端将检查此更改是否会影响用户。如果是,则客户端可以向服务器请求数据的新副本(最好在通知用户新数据可用之前)。

您可以使用 SignalR 之类的技术来通知客户端发生了变化,并让他们有机会强制刷新(如果没有,则静默更新 table不会引起任何冲突,可能是通过淡化新行)。

这避免了不断轮询服务器以进行更改的需要。您仍然会遇到冲突(也许客户端断开连接并进行更改),但您可以找出满足您需求的最佳方式。

我在 How to implement real time data for a web page. The technique is similar for desktop applications, as there are SignalR clients available for .NET in addition to JavaScript.

中讨论了使用 Web 客户端实现此目的的几种方法

请注意,此技术不限于 SignalR。存在其他技术堆栈,例如 Socket.IO,但 SignalR 将与 .NET 进行最紧密的集成,因为它来自 Microsoft。