私は本からC#でEFを使用してASP.NET MVCプロジェクトに取り組んでいます。この部分は異なるセッションから同時にエンティティを更新しないようにするためです。 この本は素晴らしいですが、残念ながらこの部分では説明が十分ではなく、誰かが私の理解を助けることができれば感謝します。 私は無関係なコードを省略しようとします。それは本当に簡単ですので、モデルは、基本的には唯一つのプロパティ「名前」を持っている:ここではDbEntityEntry OriginalValues対TryUpdateModel並行更新を避けるためのRowVersion
[HttpPost]
public ActionResult Edit(int? id, byte[] rowVersion)
{
string[] fieldsToBind = new string[] { "Name", "RowVersion" };
var categoryToUpdate = db.Categories.Find(id);
if (TryUpdateModel(categoryToUpdate, fieldsToBind))
{
try
{
db.Entry(categoryToUpdate).OriginalValues["RowVersion"] =
rowVersion;
db.SaveChanges();
return RedirectToAction("Index");
}
catch (DbUpdateConcurrencyException ex)
{//... and the code goes on to handle the concurrent update
// scenario
}
は、私は理解していないものです: をTryUpdateModelメソッドが正常にモデルを更新した場合、および新しい値「名前」をバインドと "RowVersion"(ビューで提供されていました)のどちらを使用すればいいですか?この行をインクルードする必要があります:db.Entry(categoryToUpdate).OriginalValues ["RowVersion"] = rowVersion ;?このラインは何を正確にしていますか?例外がスローされる必要があるのはなぜですか? ありがとう