我有一个 SQL Server (2012) ,我使用实体框架(4.1)访问它。 在数据库中,我有一个名为 URL 的表,其中有一个独立的进程提供新的 URL。 URL 表中的条目可以是“新建”、“处理中”或“已处理”状态。
我需要访问来自不同 电脑的 URL 表,检查具有状态“ New”的 URL 条目,获取第一个,并将其标记为“ In Process”。
var newUrl = dbEntity.URLs.FirstOrDefault(url => url.StatusID == (int) URLStatus.New);
if(newUrl != null)
{
newUrl.StatusID = (int) URLStatus.InProcess;
dbEntity.SaveChanges();
}
//Process the URL
由于查询和更新不是原子的,因此可以让两台不同的计算机读取和更新数据库中的相同 URL 条目。
是否有办法使 select-then-update 序列成为原子序列以避免这种冲突?