TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #148 98
استفاده از چند EF Core DbContext در یک برنامه

Entity Framework Core (EF Core)
یک ORM محبوب در NET. است که به شما امکان می‌دهد با پایگاه‌ داده‌های SQL کار کنید.

EF Core
از DbContext استفاده می‌کند که نمایانگر یک نشست (Session) با پایگاه داده است و مسئول ردیابی تغییرات، انجام عملیات دیتابیس و مدیریت اتصال‌های پایگاه داده می‌باشد.

به‌طور معمول، برای کل برنامه فقط یک DbContext استفاده می‌شود.
اما اگر نیاز داشته باشید چندین DbContext داشته باشید چه می‌کنید؟ 🤔

📍در این مطلب بررسی می‌کنیم:

• چه زمانی ممکن است بخواهید از چندین DbContext استفاده کنید؟

• چطور چندین DbContext ایجاد کنیم؟

• مزایای استفاده از چندین DbContext؟

📌 چرا از چندین DbContext استفاده کنیم؟


1️⃣ چندین پایگاه داده
اگر برنامه شما باید با چندین دیتابیس SQL کار کند، مجبورید از چندین DbContext استفاده کنید که هر کدام مختص یک دیتابیس مشخص هستند.

2️⃣ تفکیک مسئولیت‌ها
اگر مدل دامنه (Domain Model) برنامه شما پیچیده است، ممکن است با تفکیک وظایف بین چند DbContext عملکرد بهتری بگیرید؛ به طوری که هر DbContext مسئول یک بخش خاص از دامنه باشد.

3️⃣ معماری Modular Monolith
در این نوع معماری می‌توانید برای هر DbContext یک Schema متفاوت در پایگاه داده پیکربندی کنید تا جداسازی منطقی در سطح دیتابیس داشته باشید.

4️⃣ استفاده از Read Replicas
می‌توانید یک DbContext جداگانه برای دسترسی به Read Replica پایگاه داده تنظیم کنید و از آن فقط برای کوئری‌های خواندنی استفاده کنید. همچنین می‌توانید ویژگی QueryTrackingBehavior.NoTracking را برای آن فعال کنید تا عملکرد بهتری داشته باشید.

⚙️ ایجاد چندین DbContext در یک برنامه


فرض کنید در برنامه خود دو DbContext داریم:
• CatalogDbContext
• OrderDbContext

و می‌خواهیم شرایط زیر را رعایت کنیم:

• هر دو از یک دیتابیس استفاده کنند
• هر DbContext Schema متفاوتی داشته باشد
public class CatalogDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
}

public class OrderDbContext : DbContext
{
public DbSet<Order> Orders { get; set; }
public DbSet<LineItem> LineItems { get; set; }
}


ابتدا باید DbContext‌ها را در DI Container پیکربندی کنیم:
services.AddDbContext<CatalogDbContext>(options =>
options.UseSqlServer("CONNECTION_STRING"));

services.AddDbContext<OrderDbContext>(options =>
options.UseSqlServer("CONNECTION_STRING"));

اگر هر دو در یک Schema باشند، همین کافی است.
اما اگر بخواهید Schema جداگانه داشته باشید، باید در متد OnModelCreating این مورد را مشخص کنید:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("catalog");
}


و برای DbContext دوم:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("order");
}


⚠️ محدودیت‌ها در استفاده از چندین DbContext


• جوین (Join) بین DbContext‌های مختلف ممکن نیست.

• تراکنش‌ها فقط زمانی کار می‌کنند که هر دو DbContext از یک دیتابیس استفاده کنند.

• اگر Schema‌های جدا دارید، باید جدول تاریخچه مایگریشن‌ها را نیز جداگانه تعریف کنید:
services.AddDbContext<CatalogDbContext>(options =>
options.UseSqlServer(
"CONNECTION_STRING",
o => o.MigrationsHistoryTable(
tableName: HistoryRepository.DefaultTableName,
schema: "catalog")));


✅ مزایای استفاده از چندین DbContext


تفکیک مسئولیت‌ها → کد سازمان‌یافته‌تر و ماژولارتر

عملکرد بهتر → کاهش تداخل و بهبود همزمانی

کنترل و امنیت بیشتر → امکان تنظیم دسترسی دقیق‌تر

📝 جمع‌بندی
استفاده از چند DbContext در EF Core ساده و کاربردی است.

برای برنامه‌های Read-Heavy می‌توانید DbContext جداگانه‌ای بدون Query Tracking داشته باشید.

در معماری Modular Monolith می‌توانید DbContext‌ها را با Schema جداگانه پیکربندی کنید تا جداسازی منطقی در دیتابیس داشته باشید.

🔖هشتگ‌ها:
#DotNet #EFCore #CSharp #DbContext #ModularMonolith #EntityFramework #DatabaseDesign
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →