[英]scaling Entity Framework project that reads queue table
我有一個使用Entity Framework 6.1的Windows服務,該服務從隊列表中讀取。 我獲取狀態為Pending的最舊記錄,然后將狀態更改為InProcess ,完成后將狀態更改為Complete 。
我需要考慮擴展。 我將使用許多這些Windows服務來處理隊列表。 一個實例有可能在另一個實例獲得最舊記錄之后,但在將其設置為InProcess之前,將獲取最舊記錄。 在這種情況下,他們都將在同一條記錄上工作。
我想我可以通過行鎖定來做到這一點,但EF不支持。
任何想法如何做到這一點?
我會從EF調用一個存儲過程,一次完成所有這些操作。 使用事務來強制鎖定更新的行。
程序代碼示例:
DECLARE @myID TABLE (id INT)
BEGIN TRAN
;WITH orderCTE AS
(
SELECT TOP 1 id,status
FROM myTable T
WHERE status='Pending'
ORDER BY someDateValue ASC
)
UPDATE orderCTE SET status='inProcess'
OUTPUT inserted.id into @myID(id)
SELECT id
FROM @myID
COMMIT TRAN
這是帶有數據的功能示例:
DECLARE @test TABLE (id int, [status] varchar(100), someDateValue DATETIME)
INSERT INTO @test
VALUES (1,'Pending', GETDATE())
DECLARE @myID TABLE (id INT)
BEGIN TRAN
;WITH orderCTE AS
(
SELECT TOP 1 id,[status]
FROM @test T
WHERE status='Pending'
ORDER BY someDateValue ASC
)
UPDATE orderCTE SET [status]='inProcess'
OUTPUT inserted.ID into @myID(id)
SELECT id
FROM @myID
COMMIT TRAN
SELECT * FROM @test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.