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) ضرورية عندما تريد التأكد من تنفيذ أكثر من عملية على القاعدة معًا بشكل آمن ومنسق، خصوصًا في تطبيقات الأعمال الحرجة.

تعليقات

المشاركات الشائعة من هذه المدونة

HTML - Text Formatting تنسيقات النص

1.1 SQL Introduction

Entity Framework - مقدمة عن Entity Framework