Linq to sql linq到sql和锁定

Linq to sql linq到sql和锁定,linq-to-sql,locking,Linq To Sql,Locking,我被困在一个锁定的决定中,我认为可以利用你的专业知识 我想向表中添加一个新行,而多个线程正试图将该新行插入表中。我只想他们中的一个被杀。在插入过程中,可能会有其他线程请求从表中读取一些数据,这些请求应该会成功 对于这种情况,最好的锁定方法是什么?独占表锁无法工作,因为我希望读取查询成功 谢谢 xoxo让DB做这项工作-唯一索引键,以便第一个插入器获胜。在提交更改之前,没有一种简单的方法可以检测到它,这不会给您带来比开始时更多的麻烦。如果您想在不干扰读取的情况下序列化特定密钥上的插入,并且控制所有

我被困在一个锁定的决定中,我认为可以利用你的专业知识

我想向表中添加一个新行,而多个线程正试图将该新行插入表中。我只想他们中的一个被杀。在插入过程中,可能会有其他线程请求从表中读取一些数据,这些请求应该会成功

对于这种情况,最好的锁定方法是什么?独占表锁无法工作,因为我希望读取查询成功

谢谢
xoxo

让DB做这项工作-唯一索引键,以便第一个插入器获胜。在提交更改之前,没有一种简单的方法可以检测到它,这不会给您带来比开始时更多的麻烦。

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

这对我的情况不起作用。所以,请让我重新表述一下:我想在一段时间间隔内保持一个锁,在此期间不能进行插入,但可以进行选择。最好的方法是什么: