← بازگشت

سوالات مصاحبه Entity Framework در .NET

مقدمه

Entity Framework (EF) یک Object-Relational Mapping (ORM) فریم‌ورک قدرتمند برای .NET است که توسعه‌دهندگان را قادر می‌سازد تا با پایگاه‌های داده با استفاده از اشیاء .NET کار کنند. درک عمیق EF برای هر توسعه‌دهنده .NET که با داده‌ها سروکار دارد، ضروری است.

سوال 1: Entity Framework چیست؟

پاسخ: Entity Framework (EF) یک ORM (Object-Relational Mapper) برای .NET است. این فریم‌ورک به توسعه‌دهندگان اجازه می‌دهد تا با پایگاه داده‌ها با استفاده از اشیاء دات‌نت (C# یا VB.NET) به جای کوئری‌های SQL مستقیم کار کنند. EF مسئول نگاشت (Mapping) بین اشیاء دات‌نت و جداول پایگاه داده است.

سوال 2: مزایای استفاده از Entity Framework چیست؟

سوال 3: Code First، Model First و Database First در EF چه تفاوت‌هایی دارند؟

سوال 4: Context در Entity Framework چیست؟

Context (یا DbContext) کلاس اصلی در Entity Framework است که نقش یک پل بین مدل‌های دامنه شما و پایگاه داده را ایفا می‌کند. این کلاس مسئول موارد زیر است:

سوال 5: DbSet در Entity Framework چیست؟

DbSet یک کلاس در Entity Framework است که نماینده یک مجموعه از موجودیت‌ها (Entities) در Context است. هر DbSet به یک جدول خاص در پایگاه داده نگاشت می‌شود. شما از DbSet برای انجام عملیات CRUD (Create, Read, Update, Delete) روی موجودیت‌ها استفاده می‌کنید. به عنوان مثال، DbSet<Product> Products { get; set; } یک DbSet برای موجودیت Product ایجاد می‌کند که به جدول Products در پایگاه داده نگاشت می‌شود.

سوال 6: تفاوت بین Lazy Loading و Eager Loading در EF چیست؟

سوال 7: Migration در EF Core چیست و چرا از آن استفاده می‌شود؟

Migration در EF Core ابزاری است که به شما اجازه می‌دهد تا تغییرات مدل دامنه (کلاس‌های C#) خود را به اسکیما (Schema) پایگاه داده اعمال کنید. با هر تغییر در مدل، یک Migration جدید ایجاد می‌کنید که شامل کدهای لازم برای به‌روزرسانی پایگاه داده است. مزایای آن عبارتند از:

سوال 8: چگونه یک Migration جدید در EF Core ایجاد کنیم؟

برای ایجاد یک Migration جدید، از دستور زیر در Package Manager Console (در Visual Studio) یا Command Line Interface (CLI) استفاده می‌کنید:

Add-Migration [MigrationName]

یا در CLI:

dotnet ef migrations add [MigrationName]

[MigrationName] یک نام توصیفی برای Migration شماست (مثلاً AddProductsTable).

سوال 9: چگونه Migration را به پایگاه داده اعمال کنیم؟

برای اعمال Migration به پایگاه داده، از دستور زیر در Package Manager Console یا CLI استفاده می‌کنید:

Update-Database

یا در CLI:

dotnet ef database update

این دستور تمام Migrationهای اعمال نشده را به ترتیب به پایگاه داده اعمال می‌کند.

سوال 10: تفاوت بین Tracking و No-Tracking در EF چیست؟

سوال 11: چگونه یک موجودیت را در EF Core اضافه کنیم؟

برای اضافه کردن یک موجودیت جدید، ابتدا یک نمونه از کلاس موجودیت ایجاد می‌کنید، سپس آن را به DbSet مربوطه اضافه کرده و در نهایت SaveChanges() را فراخوانی می‌کنید:

var newProduct = new Product { Name = "Laptop", Price = 1200 };
_context.Products.Add(newProduct);
_context.SaveChanges();

سوال 12: چگونه یک موجودیت را در EF Core ویرایش کنیم؟

برای ویرایش یک موجودیت، ابتدا آن را از پایگاه داده بارگذاری می‌کنید، تغییرات لازم را اعمال می‌کنید و سپس SaveChanges() را فراخوانی می‌کنید. EF به صورت خودکار تغییرات را ردیابی می‌کند:

var productToUpdate = _context.Products.Find(1);
if (productToUpdate != null)
{
    productToUpdate.Price = 1250;
    _context.SaveChanges();
}

سوال 13: چگونه یک موجودیت را در EF Core حذف کنیم؟

برای حذف یک موجودیت، ابتدا آن را از پایگاه داده بارگذاری می‌کنید، سپس آن را از DbSet مربوطه حذف کرده و در نهایت SaveChanges() را فراخوانی می‌کنید:

var productToDelete = _context.Products.Find(1);
if (productToDelete != null)
{
    _context.Products.Remove(productToDelete);
    _context.SaveChanges();
}

سوال 14: Data Annotations و Fluent API در EF Core چه کاربردی دارند؟

سوال 15: Unit of Work و Repository Pattern در EF Core چه هستند و چرا از آنها استفاده می‌کنیم؟

Unit of Work و Repository Pattern دو الگوی طراحی هستند که برای بهبود معماری و قابلیت تست‌پذیری برنامه‌های مبتنی بر Entity Framework استفاده می‌شوند:

مزایا:

سوال 16: Shadow Properties در EF Core چیست؟

Shadow Properties ویژگی‌هایی در مدل EF Core هستند که در کلاس‌های دات‌نت شما تعریف نمی‌شوند، اما در مدل EF و در پایگاه داده وجود دارند. این ویژگی‌ها معمولاً برای ذخیره داده‌های فراداده‌ای (Metadata) یا داده‌هایی که نیازی به نمایش در مدل دامنه ندارند، استفاده می‌شوند. به عنوان مثال، می‌توانید یک Shadow Property برای LastUpdatedDate تعریف کنید که به صورت خودکار توسط EF به‌روزرسانی شود، بدون اینکه نیاز باشد این Property در کلاس مدل شما وجود داشته باشد.

سوال 17: Change Tracking در EF Core چگونه کار می‌کند؟

Change Tracking مکانیزمی است که EF Core برای ردیابی تغییرات اعمال شده بر روی موجودیت‌ها استفاده می‌کند. این مکانیزم شامل موارد زیر است:

سوال 18: Connection Pooling در EF Core چیست؟

Connection Pooling تکنیکی است که EF Core برای بهبود عملکرد از آن استفاده می‌کند. به جای ایجاد و بستن اتصال پایگاه داده برای هر درخواست، EF یک مجموعه (Pool) از اتصالات از پیش ایجاد شده نگه می‌دارد. مزایای آن عبارتند از:

برای فعال کردن Connection Pooling از متد AddDbContextPool استفاده می‌شود.

سوال 19: Global Query Filters در EF Core چیست؟

Global Query Filters امکانی است که به شما اجازه می‌دهد فیلترهای خودکار را بر روی موجودیت‌ها اعمال کنید. این فیلترها به صورت خودکار به تمام کوئری‌هایی که شامل آن موجودیت هستند، اضافه می‌شوند. کاربردهای رایج آن عبارتند از:

برای تعریف Global Query Filter از متد HasQueryFilter در OnModelCreating استفاده می‌شود.

سوال 20: Owned Types در EF Core چیست؟

Owned Types نوعی از موجودیت‌ها در EF Core هستند که نمی‌توانند به صورت مستقل وجود داشته باشند و همیشه به عنوان بخشی از یک موجودیت اصلی در نظر گرفته می‌شوند. این نوع موجودیت‌ها معمولاً برای نمایش Value Objects در Domain-Driven Design استفاده می‌شوند. مثال‌های رایج شامل آدرس، مختصات جغرافیایی یا اطلاعات تماس هستند.

ویژگی‌های کلیدی: