استفاده از Transaction در EntityFramework
یکشنبه 20 مهر 1393در این مقاله مختصری درباره Transaction و نحوه استفاده از در تکنولوژی های جدیدی مانند EntityFramework صحبت خواهد شد
با سلام خدمت دوستان
در این مقاله سعی در معرفی روشی برای استفاده از Transaction ها در EntityFramework خواهیم پرداخت
در حال حاظر از فایل DBML (Linq To SQL) برای این پروژه استفاده شده اما در واقع هیچ مشکلی برای استفاده مشابه آن در فایل EDMX و یا Code First نیز وجود نخواهد داشت
در اینجا دو روش معرفی می شود. روش ساده تر و استفاده از کلاس TransactionScope که برای اینکار نیاز به اضافه کردن رفرنس System.Transactions دارید
سپس با استفاده از کد زیر قابلیت اجرای کد ها به شکل Transactional وجود خواهد داشت
نمونه کد مربوطه
private void Method2OfTransaction() { //http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope(v=vs.110).aspx using (TransactionScope scope = new TransactionScope()) { try { // Your code var context = new DataClasses1DataContext(); var a = new Tree { Name = "Node 1", ParentTreeId = null }; context.Trees.InsertOnSubmit(a); //throw new Exception("not support!"); // do db stuff here... context.SubmitChanges(); scope.Complete(); // To commit. // more info you can see http://www.codeproject.com/Articles/690136/All-About-TransactionScope } catch (Exception ex) { } }
و در روش دوم امکان تغییر کد در صفحات مختلف وجود داشته ولی کمی از متد قبلی پیچیده تر می باشد. برای استفاده از این روش ابتدا یک Extended Method به نام BeginTransaction تعریف می کنیم .
public static class ExtendedFunction { public static DbTransaction BeginTransaction(this DataClasses1DataContext context) { if (context.Connection.State != ConnectionState.Open) { context.Connection.Open(); } return context.Connection.BeginTransaction(); } }
در این کد در صورتی که کانکشن به دیتابیس بر قرار شده باشد تنها یک Transaction شروع شده و مقدار آن بازگشت می یابد. سپس با کد زیر قابلیت قبول و یا رد تغییرات انجام شده را دارید.
private void Method1OfTrasaction() { using (var context = new DataClasses1DataContext()) using (var tx = context.BeginTransaction()) { try { var a = new Tree { Name = "Node 1", ParentTreeId = null }; context.Trees.InsertOnSubmit(a); throw new Exception("not support!"); // do db stuff here... tx.Commit(); context.SubmitChanges(); } catch (Exception ex) { tx.Rollback(); } } }
فقط به یاد داشته باشید استفاده از Transaction ها همیشه سربار پردازشی دارد و فقط در مواقع لزوم از آنها استفاده نمایید
کد پیوست به زبان #WPF C نوشته شده است
- C#.net
- 4k بازدید
- 8 تشکر