2011-04-20 29 views
0

我被困在一个锁定决定,并认为可以使用您的专业知识。LINQ到SQL和锁定

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

这种情况下最好的锁定方法是什么?独占表锁定将不起作用,因为我想读取查询成功。

感谢 XOXO

回答

0

让DB做的工作 - 唯一索引键,以便第一插入胜。在SubmitChanges之前检测它并不是一种万无一失的方法,它不会让你陷入更多麻烦之中。

+0

不适合我的情况。所以请让我重新配置它:我想锁定一段时间,在此时间段内不能插入,但可以完成选择。什么是最好的方式:) – user682732 2011-04-21 00:40:49

0

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