TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #232 101
5️⃣ قابلیت EF Core که باید بدانید 💡

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

ما موارد زیر را بررسی خواهیم کرد:

1️⃣ Query Splitting
- بهترین دوست جدید دیتابیس شما

2️⃣ Bulk Updates and Deletes
- کارایی به توان دو

3️⃣ Raw SQL Queries
- وقتی نیاز دارید یاغی شوید

4️⃣ Query Filters
- برای تمیز و مرتب نگه داشتن همه چیز

5️⃣ Eager Loading
- چون تنبلی همیشه هم خوب نیست

بزن بریم!

1️⃣ Query Splitting (تقسیم کوئری) ✂️

تقسیم کوئری یکی از آن ویژگی‌های EF Core است که به ندرت به آن نیاز دارید. تا اینکه یک روز، به آن نیاز پیدا می‌کنید. Query splitting در سناریوهایی که چندین کالکشن را eager load می‌کنید، مفید است. این به ما کمک می‌کند تا از مشکل انفجار کارتزین (cartesian explosion) جلوگیری کنیم.
Department department =
context.Departments
.Include(d => d.Teams)
.Include(d => d.Employees)
.Where(d => d.Id == departmentId)
.AsSplitQuery() // جادو اینجاست
.First();

با AsSplitQuery، EF Core برای هر navigation کالکشن، یک کوئری SQL اضافی اجرا خواهد کرد. با این حال، مراقب باشید که بیش از حد از آن استفاده نکنید.

2️⃣ Bulk Updates and Deletes (آپدیت‌ها و حذف‌های دسته‌ای) ⚡️


EF Core 7
دو API جدید برای انجام آپدیت‌ها و حذف‌های دسته‌ای اضافه کرد، ExecuteUpdate و ExecuteDelete. آنها به شما اجازه می‌دهند تعداد زیادی از ردیف‌ها را در یک رفت و برگشت به دیتابیس به طور موثر آپدیت کنید.
// افزایش ۵٪ حقوق تمام کارمندان فروش در یک کوئری
context.Employees
.Where(e => e.Department == "Sales")
.ExecuteUpdate(s => s.SetProperty(e => e.Salary, e => e.Salary * 1.05m));

// حذف تمام سبدهای خرید قدیمی‌تر از یک سال در یک کوئری
context.Carts
.Where(o => o.CreatedOn < DateTime.Now.AddYears(-1))
.ExecuteDelete();

این کار بدون بارگذاری انتیتی‌ها در حافظه، مستقیماً دستور UPDATE یا DELETE را در دیتابیس اجرا می‌کند.

3️⃣ Raw SQL Queries (کوئری‌های SQL خام) 👨‍💻

EF Core 8
یک ویژگی جدید اضافه کرد که به ما اجازه می‌دهد انواع داده مپ‌نشده را با SQL خام کوئری بزنیم.
public class ProductSummary
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public decimal TotalSales { get; set; }
}

var productSummaries = await context.Database
.SqlQuery<ProductSummary>(
$"""
SELECT p.ProductId, p.ProductName, SUM(oi.Quantity * oi.UnitPrice) AS TotalSales
FROM Products p ...
""")
.ToListAsync();

متد SqlQuery یک IQueryable برمی‌گرداند، که به شما اجازه می‌دهد کوئری‌های SQL خام را با LINQ ترکیب کنید.

4️⃣ Query Filters (فیلترهای کوئری) 🔍

فیلتر‌های کوئری مانند دستورات WHERE قابل استفاده مجدد هستند که می‌توانید به انتیتی‌های خود اعمال کنید. این فیلترها به طور خودکار به کوئری‌های LINQ هر زمان که انتیتی‌های نوع مربوطه را بازیابی می‌کنید، اضافه می‌شوند.
کاربردهای رایج:

• حذف منطقی (Soft Deletes)

• چند-مستأجری (Multi-tenancy)
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// _currentTenantId بر اساس درخواست/زمینه فعلی تنظیم می‌شود
modelBuilder.Entity<Product>().HasQueryFilter(p => p.TenantId == _currentTenantId);
}

// حالا، کوئری‌ها به طور خودکار بر اساس مستأجر فیلتر می‌شوند
var productsForCurrentTenant = context.Products.ToList();
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 →