2011-04-20 27 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調用它們而不是發送命令。