linq to sql and locking



我正在做一个锁定的决定,我想可以借用一下你的专业知识。

我想添加一个新的行到表和多个线程试图插入新行到表。我只希望其中一个成功。当插入完成时,可能会有其他线程请求从表中读取一些数据,并且它们应该成功。

在这种情况下,最好的锁定方法是什么?排他表锁不能工作,因为我希望读取查询成功。

谢谢亲亲抱抱

让数据库完成这项工作-唯一索引键,以便第一个插入者获胜。没有一种万无一失的方法可以在提交更改之前检测到它,这会给您带来比开始时更多的麻烦。

如果您想在不干扰读取的情况下序列化特定键上的插入,并且您控制了所有将执行此操作的代码,请查看sp_getapplock。使applock的名称对应于您试图阻止插入的键,然后让并发插入代码对sp_getapplock执行0超时调用。成功的程序应该在持有锁时再次检查以确保记录不存在,执行插入操作,然后释放锁。它不漂亮,也不快,但它能满足你的要求。您还可以在DataContext上连接sp_getapplock和相关的sp,这样您仍然可以通过L2S而不是发送命令来调用它们。

最新更新