Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 扩展读取队列表的实体框架项目_Sql Server_Entity Framework 6 - Fatal编程技术网

Sql server 扩展读取队列表的实体框架项目

Sql server 扩展读取队列表的实体框架项目,sql-server,entity-framework-6,Sql Server,Entity Framework 6,我有一个windows服务,它使用EntityFramework6.1从队列表中读取数据。我抓取状态为“挂起”的最旧记录,然后将状态更改为“处理中”,完成后将状态更改为“完成” 我需要考虑缩放。我将让许多这些windows服务处理队列表。一个实例有可能在另一个实例获得最旧的记录之后,但在它将其设置为进程中的之前,获取该记录。在这种情况下,他们将在同一条记录上工作 我想我可以通过行锁定来实现这一点,但EF不支持这一点 知道如何实现这一点吗?我会从EF调用一个存储过程,一次完成这一切。使用事务强制锁

我有一个windows服务,它使用EntityFramework6.1从队列表中读取数据。我抓取状态为“挂起”的最旧记录,然后将状态更改为“处理中”,完成后将状态更改为“完成”

我需要考虑缩放。我将让许多这些windows服务处理队列表。一个实例有可能在另一个实例获得最旧的记录之后,但在它将其设置为进程中的之前,获取该记录。在这种情况下,他们将在同一条记录上工作

我想我可以通过行锁定来实现这一点,但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