我有一个桌面应用程序。在此应用程序中,有许多用户可以打开和处理的记录。如果用户点击记录,程序将锁定记录,因此没有其他人可以使用它。如果记录已被锁定,则用户仍可以查看它,但它将是只读的。我们本地网络上的许多用户都可以打开并处理记录。
我的第一个想法是使用数据库来管理记录锁。但我不确定这是最好的方法。我可以使用任何编程模式或现成的解决方案吗?
答案 0 :(得分:3)
我为访问数据库的WPF应用程序实现了一个类似的系统,但我不再能访问源代码,我将在这里解释一下。我采取的路线与使用数据库有些不同。使用Duplex WCF service,您可以在某个位置(即数据库服务器)托管客户端连接的服务。要理解的关键事项:
long
)来使此服务成为通用的。在这种情况下,如果用户经常修改较大的数字,您可以使用类似于bool AcquireLock(string dataType, long id)
的签名或将bool
/ long
替换为bool[]
和long[]
行。Dictionary<String (DataType), Dictionary<User, HashSet<long>>
的行中,其中根字符串是数据类型。BeginEdit
,首先通过在您的视图模型上实施IEditableObject
来检查服务器。这种“实时并发”形式提供了比提供处理乐观并发问题的方法更好的用户体验,并且在技术上也可能更容易实现,具体取决于您的方案。