linq到sql并发问题!

时间:2011-01-26 11:33:45

标签: linq-to-sql

我有一个删除表行的Windows服务。如果我的wcf服务加载了行(做一些操作),我不希望它删除行。似乎我应该放一些锁定机制,但我无法找到如何做到这一点。在这方面有任何帮助吗?

感谢 贾马尔。

1 个答案:

答案 0 :(得分:0)

您不应该持有长期数据库锁。使用某种标记技术,例如每个加载行的id表,其中外键返回原始表。这将阻止删除,直到WCF服务删除辅助表中的条目。它还可以通过将WHERE NOT EXISTS (SELECT * FROM loaded_rows WHERE id = outer.id)附加到DELETE语句来启用安全删除。

此模型甚至允许多个“加载器”,方法是在辅助表中添加“loader_id”列。

建议方法的主要问题是WCF服务必须在完成后删除行。如果由于错误或崩溃而忽略了这一点,则行将被永久锁定(或者至少在DBA徘徊之前)。有很多方法可以解决这个问题,主要围绕某种到期机制。