Concurrency Exception


Masalah Concurrency terjadi jika aplikasi kita di buka di beberapa browser, dan beberapa user berusaha mengupdate database pada field dan record yang sama secara bersama-sama pula. Seharusnya aplikasi mengantisipasi hal ini, karena menyebabkan data menjadi tidak konsisten.
Misalnya terdapat user A yang mengupdate data X pada suatu tempat, bersamaan dengan user B mengupdate data yang sama pada tempat yang berbeda secara bersama-sama. Ketika user A mengupdate data X menyadi data Y, maka user B belum mengetahui bahwa data X telah berubah menjadi data Y. Maka seharusnya dia tidak dapat mengupdate data tersebut, kecuali yang ditampilkan di layar sudah yang paling baru (data Y, bukan data X).
C# menggunakan DbUpdateConcurrencyException untuk menangkap eksepsi ini.
Snippet:

[HttpPost]
public ActionResult Edit(Product product)
{
try
{
if (ModelState.IsValid)
{
db.Entry(product).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
return RedirectToAction("Index");
}
}
catch (DbUpdateConcurrencyException ex)
{
var entry = ex.Entries.First();
var databaseValues = (Product)entry.GetDatabaseValues().ToObject();
var clientValues = (Product)entry.Entity;
if (databaseValues.Name != clientValues.Name)
{
ModelState.AddModelError("Name", "CurrentValue" + databaseValues.Name);
}
if (databaseValues.Price != clientValues.Price)
{
ModelState.AddModelError("Price", "CurrentValue" + databaseValues.Price);
}
ModelState.AddModelError(string.Empty, "Bla bla bla");
product.Timestamp = databaseValues.Timestamp;
}
catch (DataException de)
{
ModelState.AddModelError(string.Empty, "Unable to save changes");
}
ViewBag.InstructorID = new SelectList(db.Product, "ProductId", "Name", product.Id);
return View(product);
}

About abunajiyah
A Programmer

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s