آموزش پیشرفته Entity Framework Core 9

آموزش EF Core 9، بهترین روش‌های EF Core،‌بهینه‌سازی کوئری در EF Core، الگوی Repository در EF Core 1404/7/19
نویسنده: مدرس بهمن آبادی

آموزش پیشرفته entity framework core 9

entity framework core

مقدمه

Entity Framework Core (یا EF Core) یکی از محبوب‌ترین ORMهای دات‌نت است که هدف آن ساده‌سازی ارتباط بین کد برنامه و پایگاه داده است.
در نسخه ۹، این فریم‌ورک به بلوغ بالایی رسیده و ویژگی‌های جدیدی را معرفی کرده که توسعه‌دهندگان حرفه‌ای را قادر می‌سازد تا عملکرد و کنترل بیشتری روی داده‌ها داشته باشند.
در این مقاله، به بررسی مفاهیم پیشرفته EF Core 9 می‌پردازیم؛ از طراحی مدل‌های پیچیده تا بهینه‌سازی پرس‌وجوها و مدیریت تراکنش‌ها.

مروری سریع بر مفاهیم پایه

EF Core به‌صورت خلاصه شامل سه بخش کلیدی است:

  • DbContext برای مدیریت اتصال، تغییرات و ذخیره‌سازی داده‌ها.

  • DbSet برای دسترسی به جداول داده در قالب اشیای strongly typed.

  • LINQ برای نوشتن queryها به شکل شی‌گرا.

هرچند این مفاهیم پایه هستند، در مباحث پیشرفته اهمیت زیادی در درک درست آن‌ها وجود دارد، زیرا عملکرد و رفتار EF Core بر اساس نحوه‌ی استفاده از همین اجزا تعیین می‌شود.

امکانات جدید در EF Core 9

EF Core 9 ویژگی‌های جدید و بهبودهای متعددی دارد:

  • بهبود در Query translation و پشتیبانی بهتر از LINQ پیچیده.

  • بهینه‌سازی در compiled models برای افزایش سرعت startup.

  • پشتیبانی بهتر از raw SQL queries در متدهای ترکیبی.

  • سازگاری بهتر با نسخه‌های جدید .NET 9 و امکانات زبان C# 13.

این تغییرات باعث شده EF Core 9 نه‌تنها سریع‌تر، بلکه پایدارتر از نسخه‌های قبلی باشد.

اگر تمایل به یادگیری Entity Framework و آموزش برنامه نویسی وب دارید دوره جامع برنامه نویسی مهندس بهمن آبادی تمام این آموزشهارو شامل می شود

طراحی مدل داده پیشرفته

در پروژه‌های واقعی، مدل داده‌ها معمولاً ساده نیست. EF Core امکانات متنوعی برای مدل‌سازی ساختارهای پیچیده ارائه می‌دهد:

🔹 Inheritance Mapping

سه روش برای نگاشت ارث‌بری در EF Core وجود دارد:

  • TPH (Table Per Hierarchy): تمام کلاس‌ها در یک جدول مشترک ذخیره می‌شوند.

  • TPT (Table Per Type): هر کلاس در جدول جداگانه‌ای ذخیره می‌شود.

  • TPC (Table Per Concrete Type): هر کلاس پیاده‌سازی مستقل خودش را در جدول خاص دارد.

🔹 Owned Types

برای اشیایی که به‌صورت منطقی وابسته به entity اصلی هستند (مثلاً آدرس کاربر)، می‌توان از Owned Types استفاده کرد تا در همان جدول ذخیره شوند ولی در مدل به‌صورت شیء مجزا وجود داشته باشند.

🔹 Composite Keys

در صورت نیاز به کلیدهای ترکیبی، می‌توان با Fluent API آن را تعریف کرد:

 

modelBuilder.Entity<Order>()
    .HasKey(o => new { o.OrderId, o.ProductId });

 

پیکربندی پیشرفته با Fluent API

Fluent API کنترل دقیق‌تری بر مدل‌ها فراهم می‌کند.
چند مورد کلیدی:

  • Table Splitting: تقسیم داده‌های یک entity در چند جدول مختلف.

  • Shadow Properties: ویژگی‌هایی که در کلاس وجود ندارند ولی در پایگاه داده نگهداری می‌شوند.

  • Value Conversions: تبدیل نوع داده بین مدل و دیتابیس (مثلاً تبدیل enum به string).

  • Global Query Filters: برای فیلترکردن داده‌ها در تمام Queryها (مثلاً حذف نرم).

  • Index Configuration: تعریف ایندکس‌ها برای بهبود سرعت query.

 

Query پیشرفته و بهینه‌سازی

در پروژه‌های بزرگ، بهینه‌سازی queryها نقش حیاتی دارد.

🔹 بارگذاری داده‌ها

EF Core از سه روش برای بارگذاری داده مرتبط پشتیبانی می‌کند:

  • Eager Loading: با استفاده از Include()

  • Lazy Loading: بارگذاری خودکار هنگام دسترسی

  • Explicit Loading: بارگذاری دستی با استفاده از Load()

🔹 Projection

استفاده از DTOها برای انتقال داده و کاهش سربار حافظه:

var result = _context.Users
    .Select(u => new UserDto { Id = u.Id, Name = u.Name })
    .ToList();

 

Raw SQL و FromSqlInterpolated

در مواقع خاص می‌توان Queryهای SQL سفارشی نوشت تا کنترل کامل روی دیتابیس داشته باشیم:

var data = context.Users.FromSqlInterpolated($"SELECT * FROM Users WHERE Age > {age}");

 بهینه‌سازی Query Split

در EF Core 9، مکانیزم Query Splitting بهینه‌تر شده و برای جلوگیری از joinهای سنگین استفاده می‌شود:

 

context.Blogs
    .AsSplitQuery()
    .Include(b => b.Posts)
    .ToList();

 

Migration و تغییرات ساختاری

Migration ابزاری برای مدیریت نسخه‌های دیتابیس است.
ویژگی‌های مهم در سناریوهای پیشرفته:

  • اجرای Migrationهای سفارشی با کد SQL اختصاصی.

  • تغییر نوع ستون‌ها و انتقال داده‌ها بین جداول.

  • مدیریت چند محیط (Dev / Staging / Production) با تنظیم مسیر جداگانه برای migrationها.

 

تراکنش، همزمانی و مدیریت خطا

EF Core به‌صورت پیش‌فرض تراکنش را در هنگام SaveChanges() مدیریت می‌کند، اما می‌توان تراکنش‌های دستی نیز ساخت:

using var transaction = context.Database.BeginTransaction();
// عملیات مختلف
transaction.Commit();

 

برای کنترل همزمانی (Concurrency)، می‌توان از RowVersion یا ConcurrencyToken استفاده کرد تا از overwrite ناخواسته داده‌ها جلوگیری شود.

الگوهای طراحی در EF Core

در پروژه‌های بزرگ‌تر، استفاده از الگوهای طراحی باعث تمیزی کد و سهولت نگهداری می‌شود:

  • Repository Pattern: جدا کردن منطق داده از لایه بیزنس.

  • Unit of Work: مدیریت چندین repository در یک تراکنش.

  • Dependency Injection: تزریق DbContext به سرویس‌ها با lifetime مناسب (معمولاً Scoped).

 

تست لایه داده

EF Core ابزار مناسبی برای تست فراهم می‌کند:

  • استفاده از InMemory Provider یا SQLite InMemory برای تست‌های سریع.

  • Seed کردن داده‌ها برای تست.

  • بررسی رفتار تراکنش‌ها و rollback در محیط تست.

 

بهبود عملکرد (Performance Tuning)

  • AsNoTracking() برای Queryهایی که نیازی به تغییر ندارند.

  • Batching برای ارسال چند دستور در یک roundtrip.

  • Bulk Insert/Update/Delete با کتابخانه‌هایی مانند EFCore.BulkExtensions.

  • Caching و Logging برای مانیتورینگ رفتار Queryها.

 

مثال عملی کوتاه

فرض کنید یک فروشگاه آنلاین دارید. با استفاده از EF Core 9 می‌توانید:

  • موجودیت‌های Product, Order, Customer را مدل کنید.

  • از Owned Types برای آدرس مشتری استفاده کنید.

  • با Global Query Filters محصولات حذف‌شده را پنهان کنید.

  • با AsSplitQuery عملکرد نمایش سفارشات را بهبود دهید.

 

جمع‌بندی

Entity Framework Core 9 مجموعه‌ای از ابزارها و قابلیت‌های قدرتمند را فراهم کرده تا توسعه‌دهندگان بتوانند کنترل کامل بر داده‌ها، مدل‌ها و عملکرد داشته باشند.
درک عمیق مفاهیم پیشرفته EF Core باعث می‌شود بتوانید سیستم‌هایی مقیاس‌پذیر، بهینه و ایمن طراحی کنید.

اگر تمایل به یادگیری Entity Framework و آموزش برنامه نویسی وب دارید دوره جامع برنامه نویسی مهندس بهمن آبادی تمام این آموزشهارو شامل می شود

 

منابع پیشنهادی

  • Microsoft Learn – Entity Framework Core 9

  • LearnEntityFrameworkCore.com

  • CodeWithMukesh Blog