我有一个删除表行的Windows服务。如果我的wcf服务加载了行(做一些操作),我不希望它删除行。似乎我应该放一些锁定机制,但我无法找到如何做到这一点。在这方面有任何帮助吗?
感谢 贾马尔。
答案 0 :(得分:0)
您不应该持有长期数据库锁。使用某种标记技术,例如每个加载行的id表,其中外键返回原始表。这将阻止删除,直到WCF服务删除辅助表中的条目。它还可以通过将WHERE NOT EXISTS (SELECT * FROM loaded_rows WHERE id = outer.id)
附加到DELETE语句来启用安全删除。
此模型甚至允许多个“加载器”,方法是在辅助表中添加“loader_id”列。
建议方法的主要问题是WCF服务必须在完成后删除行。如果由于错误或崩溃而忽略了这一点,则行将被永久锁定(或者至少在DBA徘徊之前)。有很多方法可以解决这个问题,主要围绕某种到期机制。