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
たが、デッドロックについて不平を言います。
これを達成するための最善の方法は何ですか?