TransactionScope


Apabila terdapat lebih dari satu transaksi dijalankan , diperlukan kepastian semua transaksi berjalan sukses, apabila salah satu transaksi gagal, maka harus ada mekanisme untuk membatalkan transaksi yang telah dijalankan.
Snippet:

[HttpPost]
public ActionResult Create(User user)
{
if (ModelState.IsValid)
{
using (TransactionScope scope = new TransactionScope())
{
try
{
MembershipUser membership = Membership.CreateUser(user.Name, user.Password);
db.Users.Add(user);
db.SaveChanges();
//throw new Exception();
scope.Complete();
}
catch (MembershipCreateUserException ex)
{
string exceptionstring = ex.Message;
return View();
}
catch (EntityException ex)
{
string exceptionstring = ex.Message;
return View();
}
catch (Exception) { }
}
}
return RedirectToAction("Index");
}

Pada contoh di atas, transaksi pertama adalah insert user pada database bawaan System.WebSecurity.Membership, sedangkan transaksi kedua adalah insert user pada database aplikasi (custom). Test kode ini adalah dengan menambahkan Throw setelah transaksi pertama di eksekusi. Throw ini menyebabkan tranksaksi kedua tidak tereksekusi, sehingga otomatis scope.Complete tidak tereksekusi. Hasilnya transaksi pertama juga dibatalkan.

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

%d bloggers like this: