我有一个asp.net网站,用于在数据库表中存储事件。然后我有一个Windows服务应用程序,读取这些事件并执行适当的操作。目前,两个进程可以同时插入和删除同一个表中的记录。
开发这样一个系统有什么更好的模式,以确保两者不会同时在同一张桌子上工作?
答案 0 :(得分:1)
我不确定模式,但我会做一个WCF服务,让两者都使用它来访问数据。然后在更改(或读取)表内容的所有方法之间共享一个公共锁定对象。
答案 1 :(得分:0)
对于这种情况,我使用了一种模式,确保数据不能同时更新。
我总是在表格中添加一个特殊列,通常是'timeMampified'类型'timestamp'。添加或插入行时,我总是设置此列。
当我更新记录时,我确保存储过程检查我传入的值与存储在数据库中的值。如果它们不同,则另一个用户或进程已更改此行,并引发并发错误。
这可以适用于调用过程或在您的服务中处理。
答案 2 :(得分:0)
这可能是一个架构问题,而不是其他任何问题。
为什么需要两个删除记录的进程?
对于同一个表中的CRUD数据,通常不需要两个不同的进程。您可以做的一件事是使用服务包装数据库/表,然后让需要使用该数据的所有进程使用该服务。然后,该服务可以处理呼叫的序列化。无论哪种方式,只有一个进程直接与DB一起工作。
此外,听起来像你是一个事件采购类型的架构,这让我想知道为什么你需要首先删除记录......