저는 C#에서 EF를 사용하여 ASP.NET MVC 프로젝트를 작업 중이며이 부분은 다른 세션에서 엔티티를 동시에 업데이트하지 않도록하기위한 것입니다. 이 책은 훌륭하지만 유감스럽게도이 부분에서는 설명이 충분하지 않으며 누군가가 나를 이해하도록 도와 주시면 감사하겠습니다. 관련성없는 코드를 생략하려고합니다. TryUpdateModel 방법은 성공적으로 모델을 업데이트하고, 새로운 가치의 "이름"바인딩 경우 :DbEntityEntry OriginalValues vs. 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
}
내가 이해하지 못하는 것입니다 :이 모델은 기본적으로는 정말 간단하므로 단 하나의 속성 "이름"가 및 "RowVersion"(뷰에서 제공 한)이 줄을 포함시켜야하는 이유는 무엇입니까? db.Entry (categoryToUpdate) .OriginalValues [ "RowVersion"] = rowVersion; 이 라인은 정확히 무엇을합니까? 예외가 발생하는 데 필요한 이유는 무엇입니까? 감사합니다.