オブジェクトのフィールドを更新して、すぐにデータベースに保存しようとしました。
using (var ctx = new DataModel(_connectionString))
{
var MyObject it = ctx.MyObjects.Where(someConstraint).ToList()[0];
try
{
//update check time
ctx.Refresh(RefreshMode.StoreWins, it); //making sure I have it
ctx.AcceptAllChanges(); // in case something else modified it - seems unnecessary
it.TimeProperty= DateTime.UtcNow; //Setting the field
ctx.DetectChanges(); //seems unnecessary
ctx.SaveChanges(SaveOptions.AcceptAllChangesAfterSave); //no SaveOptions changed the behavior
}
catch (OptimisticConcurrencyException)
{
_logger.DebugFormat(workerClassName + ": another worker just updated the LastCheckTime");
}
//Do some other work and/or sleep
}
2 つ以上のインスタンスを持つ Azure エミュレーターでこれを実行すると、ここで多くの OptimisticConcurrencyExceptions が発生します。
オブジェクトを更新し、そのフィールドの 1 つを更新してから、それらの変更をデータベースにプッシュしようとしています。ただし、楽観的同時実行が妨げられています。
注: オプティミスティック コンカレンシーは、私が触れたことのない TimeStamp フィールドに設定されています。
それはなぜですか、どうすれば修正できますか?