簡體   English   中英

擴展讀取隊列表的Entity Framework項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM