Entity Framework Core شرح مبسط للمبتدئين

x32x01
  • بواسطة x32x01 ||
Entity Framework Core: إزاي تخلي الداتابيز تتكلم C#
عمرك كتبت كود شغال تمام التمام… لكن وإنت بتتعامل مع الداتابيز تحس إنكم مش فاهمين بعض؟
إنت بتتكلم C#… وهي بترد عليك بـ SQL…
كأنكم في مكالمة Zoom والصوت بيقطع 😅

هنا بقى بييجي دور Entity Framework Core، اللي بيخلّيك تكلم الداتابيز بلغة C# نفسها، كأنها جزء طبيعي من الكود بتاعك.

الفكرة ببساطة: ORM​

EF Core هو ORM (Object-Relational Mapper).
يعني:
في الكودفي الداتابيز
class Productجدول Products
product.Nameعمود Name
List<Product>Rows جوه الجدول
إنت بتكتب C#، وهو يترجم الكلام ده لـ SQL، ينفذ الـ Query، ويرجعلك النتائج Objects جاهزة.
من غير ما تكتب SQL بنفسك.



مثال سريع​

بدل ما تكتب:
C#:
string query = "SELECT * FROM Products";
var products = ExecuteQuery(query);
بتكتب:
C#:
var products = context.Products.ToList();
نفس النتيجة ✅
بس الكود بقى:
  • أوضح
  • أقل
  • أسهل في الصيانة



طب حلو… فين المشكلة؟​

المشكلة إن EF Core ذكي… بس ممكن يفهمك غلط لو إنت مش فاهمه.

فيه نقطتين لازم تفهمهم كويس جدًا لو عايز أداء عالي:



1) الفرق بين IQueryable و IEnumerable​

بص على الكودين دول:
C#:
var products = context.Products.Where(p => p.Price > 100).ToList();
C#:
var products = context.Products.ToList().Where(p => p.Price > 100);
الاتنين شبه بعض… لكن الفرق بينهم ضخم:
السطر الأولالسطر الثاني
الفلترة بتحصل في الداتابيز نفسهاالفلترة بتحصل في الـ RAM بعد ما يجيب كل الداتا
سريع و efficient ✅بطيء وضار جدًا للأداء ❌

الخلاصة:​

  • طول ما إنت شغال على الداتابيز → اشتغل بـ IQueryable
  • أول ما تعمل .ToList() → الـ Query اتنفذت خلاص
فـ استخدم .ToList() آخر خطوة مش أول خطوة.



2) مشكلة الـ N+1 (اللي بتبطّل السيرفر من غير ما تحس)​

تخيل عندك Categories وكل Category ليها Products.
وكتبت الكود ده:
C#:
var categories = context.Categories.ToList();
foreach (var category in categories)
{
    foreach (var product in category.Products)
    {
        Console.WriteLine(product.Name);
    }
}

اللي بيحصل في الخلفية هو:
  • Query عشان يجيب الـ Categories → ✅
  • وبعدين Query لكل Category عشان يجيب الـ Products💣
لو عندك 50 Category → هيبقى عندك 1 + 50 = 51 Query 😨

الحل: Eager Loading​

C#:
var categories = context.Categories
    .Include(c => c.Products)
    .ToList();
Query واحدة فيها JOIN → أداء أسرع بكتير 🚀



الخلاصة 🎯

بدون EF Coreمع EF Core
تكتب SQL كتيرتكتب C# بس
كود أطولكود أقصر
صيانة صعبةصيانة أسهل
أخطاء injection محتملةحماية تلقائية
بس! لازم تكون فاهم EF بيفكر إزاي…
عشان بدل ما يساعدك → مايبقاش هو سبب البطء 😅
 
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
107
x32x01
x32x01
x32x01
الردود
0
المشاهدات
246
x32x01
x32x01
x32x01
الردود
0
المشاهدات
390
x32x01
x32x01
x32x01
الردود
0
المشاهدات
688
x32x01
x32x01
x32x01
الردود
0
المشاهدات
635
x32x01
x32x01
x32x01
الردود
0
المشاهدات
851
x32x01
x32x01
x32x01
الردود
0
المشاهدات
56
x32x01
x32x01
x32x01
الردود
0
المشاهدات
607
x32x01
x32x01
x32x01
الردود
0
المشاهدات
932
x32x01
x32x01
x32x01
الردود
0
المشاهدات
54
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,983
المشاركات
2,183
أعضاء أكتب كود
479
أخر عضو
as6318380@gmail
عودة
أعلى