Entity Framework - التعامل مع Transactions
Entity Framework Core - التعامل مع Transactions
Transaction معناها تنفيذ مجموعة من العمليات ككتلة واحدة، بحيث إذا فشلت أي عملية يتم التراجع عن كل العمليات الأخرى (Rollback)، لضمان التكامل الكامل للبيانات.
---🔹 لماذا نستخدم المعاملات (Transactions)؟
- ضمان أن جميع العمليات تتم بنجاح أو لا شيء يحدث إطلاقًا.
- تجنب قاعدة بيانات غير متسقة بسبب فشل جزئي في العمليات.
🔹 كيفية استخدام Transaction مع EF Core:
يمكنك استخدام كائن DbContext.Database.BeginTransaction() للتحكم اليدوي بالمعاملة.
🔹 مثال عملي على استخدام Transaction:
using var transaction = await dbContext.Database.BeginTransactionAsync();
try
{
dbContext.Students.Add(new Student { Name = "أحمد", Age = 22 });
await dbContext.SaveChangesAsync();
dbContext.Departments.Add(new Department { Name = "علوم الحاسب" });
await dbContext.SaveChangesAsync();
await transaction.CommitAsync(); // تأكيد المعاملة
}
catch (Exception)
{
await transaction.RollbackAsync(); // التراجع في حالة وجود خطأ
}
---
🔹 شرح الكود:
- بدأنا معاملة جديدة باستخدام
BeginTransactionAsync(). - أضفنا طالبًا وقسمًا، وحفظنا التغييرات.
- إذا نجحت كل العمليات، يتم تأكيد المعاملة باستخدام
CommitAsync(). - إذا حدث خطأ في أي مكان، يتم التراجع الكامل باستخدام
RollbackAsync().
🔹 ملاحظات إضافية:
- ✅ EF Core يدعم المعاملات التلقائية عند تنفيذ
SaveChangesإذا كان هناك عدة تغييرات. - ✅ لكن للسيطرة الكاملة (خصوصًا عند التعامل مع أكثر من سياق أو عملية خارجية) من الأفضل استخدام BeginTransaction يدويًا.
✅ المعاملات (Transactions) ضرورية عندما تريد التأكد من تنفيذ أكثر من عملية على القاعدة معًا بشكل آمن ومنسق، خصوصًا في تطبيقات الأعمال الحرجة.
تعليقات
إرسال تعليق