我想创建一个 LINQ to SQL 支持的队列。但是我不确定最好的方法是什么。
现在我做了这样的事情:
public static void Queue(Item item)
{
var db = new MyDataContext();
item.Time = DateTime.Now;
db.Items.InsertOnSubmit(item);
db.SubmitChanges();
}
public static Item TryDequeue()
{
try
{
var db = new MyDataContext();
var item = db.Items
.Where(x => x.Status == 0)
.OrderBy(x => x.Time)
.FirstOrDefault();
if (item == null)
return null;
item.Status += 1;
db.SubmitChanges();
return item;
}
catch (ChangeConflictException)
{
return null;
}
}
但是,我确实得到了一些ChangeConflictException
s。
我希望得到的查询是一个原子事务,它选择元素并设置它的状态,然后返回,没有任何冲突,我认为情况似乎并非如此。我试过使用TransactionScope
,但它抱怨死锁。
实现这一目标的最佳方法是什么?