【发布时间】:2012-11-04 10:31:59
【问题描述】:
我有一个使用实体框架 (4.1) 访问的 SQL Server (2012)。 在数据库中,我有一个名为 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 序列原子化以避免这种冲突?
【问题讨论】:
标签: c# sql-server entity-framework multiprocessing