分離レベルをよりよく理解しようとする - エンティティ フレームワークと SQL サーバーを使用する
次のシナリオで推奨される分離レベルは?
航空券やイベント チケットなどのオンライン予約システム
シナリオ -
イベントの容量が 100 であると仮定しましょう。擬似コードは次のとおりです。
Begin transaction
If SeatCount < 100
SeatCount = SeatCount + 1
End transaction
編集- ここでのコメントに応えて、私の疑似コードが実際のコードでどのように見えるかを示します。私はコードを持っていません。シナリオをよりよく理解しようとしています。「イベント」という 2 つのテーブルがあり、そこに「名前、座席指定」という 2 つの列があり、個々のチケットの詳細があるテーブル チケットがあるとします。
bool tSuccess = false;
//this transactionscope resolves to serializable
using (TransactionScope transaction = new TransactionScope()
{
try{
if(objectcontext.event.SeatsBooked < 100)
{
objectcontext.event.SeatsBooked = objectcontext.event.SeatsBooked + 1;
ticket newTicket = new ticket{
};
objectcontext.tickets.AddObject(newTicket);
objectcontext.SaveChanges();
}
}
catch(Exception e)
{
//log and return
}
}
if (tSuccess)
{
bd.AcceptAllChanges();
}
このシナリオでは、2 つのトランザクションが同じシートをめぐって競合する可能性があるため、コミットされた読み取りまたは反復可能な読み取りがオーバーブッキングまたは更新の損失につながると想定しても問題ありません。
シリアライズ可能にするための推奨されるアプローチはありますか?