Entity Framework と C# を使用して Web API に取り組んでいます。ダーティリードの解決策が必要です。
以下の方法とトランザクション方法を試しましたが、ダーティリードの解決策が必要です。
ダーティリードまたはファントムリードは、ユーザーが最新のデータを更新していない現象です。
ユーザー A がセールスマンの Web ページを開いたとします。
ユーザー B も同じセールスマンの Web ページを開きました
A はセールスマン ID 1001 をロードし、B も 1001 をロードしました。A はセールスマン名を X に変更して保存しました。
しかし、B には古いデータが表示されており、B がセールスマンの名前を Y に変更すると、A の変更は上書きされます。したがって、B が変更を DB に書き込むのを防ぐ必要があります。
したがって、上記の概念に基づくソリューションが必要です。
using (var transaction = db.Database.BeginTransaction())
{
try
{
db.SaveChanges();
transaction.Commit();
}
catch (Exception excp)
{
throw excp;
}
}
return Ok();
以下は私が試したコードです
using (var transaction = db.Database.BeginTransaction())
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
KSTU_COUNTER_MASTER kcm = new KSTU_COUNTER_MASTER();
kcm.obj_id = Common.GetNewGUID();
kcm.company_code = Common.CompanyCode;
kcm.branch_code = Common.BranchCode;
kcm.counter_code = c.CounterCode;
kcm.counter_name = c.CounterName;
kcm.Maincounter_code = c.MaincounterCode;
kcm.obj_status = c.ObjectStatus;
kcm.UpdateOn = Framework.Common.GetDateTime();
kcm.UniqRowID = Guid.NewGuid();
db.KSTU_COUNTER_MASTER.Add(kcm);
try
{
db.SaveChanges();
transaction.Commit();
}
catch (Exception excp)
{
throw excp;
}
}
return Ok();