2011-12-06 85 views
0

我有一个要求,其中调用Web服务来生成列表中的下一个数字。锁定表读取

有多个客户端,我不想锁定整个表只是客户端的记录,我得到的下一个数字。每个客户都有自己的编号系统。

但是,我需要锁定表读取特定的记录,以便我可以生成新的数字,保存并返回它。

我正在考虑将整个列表加载到内存中,在那里进行更改,然后使用enqueue和dequeue来简化请求,但这不是以客户端为中心的。由于要求很低,因此在一天结束时不应成为问题。

我们使用实体框架和LINQ进行数据访问。

我想我问的是你可能会用什么办法锁定阅读作为主要问题。

+0

它是安全的假设SQL服务器或者你需要支持其他后端:

,我们所得到的是下一个记录编号(不是我们的数据库设计),我们通常在插入使用它? –

+0

是的SQL服务器 – griegs

回答

3

假设您使用的是SQL Server,我们处理此问题的方式是在SELECT语句中使用UPDLOCK表提示执行SQL查询。

INSERT 
    INTO TableName (RecordNumber) 
SELECT ISNULL(MAX(RecordNumber, 0) + 1 
    FROM TableName WITH (UPDLOCK) 
+0

+1这是非常干净的方式来避免竞争条件。 –

+0

+1,是的,我喜欢这个,看起来好像是我想的那样认为 – griegs

+0

太棒了,谢谢先生。 – griegs