【问题标题】:linq to sql and lockinglinq to sql 和锁定
【发布时间】:2011-04-20 22:34:48
【问题描述】:

我陷入了锁定决定,我认为可以利用您的专业知识。

我想向表中添加一个新行,并且多个线程正在尝试将该新行插入到表中。我只希望其中一个成功。在插入过程中,可能有来自其他线程的请求从表中读取一些数据,它们应该会成功。

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

谢谢 xoxo

【问题讨论】:

    标签: linq-to-sql locking


    【解决方案1】:

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

    【讨论】:

    • 这不适用于我的情况。所以请让我重新表述一下:我想在一段时间内保持锁定,在此期间不能进行插入,但可以进行选择。最好的方法是什么:)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2011-11-18
      • 2011-04-25
      相关资源
      最近更新 更多