آموزش OnDelete در EF Core

تهران آی تی / برنامــه نویــسـی / آموزش OnDelete در EF Core

آموزش OnDelete در EF Core و Asp.Net Core

در آموزش OnDelete در EF Core قصد داریم یکی از مفاهیم مهم در طراحی پایگاه داده با استفاده از Entity Framework Core را بررسی کنیم. Delete Behavior یا همان OnDelete. هنگامی که بین دو Entity رابطه برقرار می‌کنیم، باید تعیین کنیم که هنگام حذف یکی از طرفین، چه اتفاقی برای طرف دیگر بیفتد. این رفتارها با استفاده از متد .OnDelete() در Fluent API قابل تنظیم هستند.

انواع روش‌های حذف – OnDelete در EF Core

در EF Core، پنج روش اصلی برای تعیین رفتار حذف وجود دارد: در این آموزش، تمرکز ما روی سه نوع پرکاربرد یعنی Cascade، Restrict و SetNull خواهد بود.

نوع توضیح عملکرد مثال کاربردی
Cascade با حذف موجودیت والد، موجودیت‌های فرزند نیز به‌صورت خودکار حذف می‌شوند. حذف سفارشات هنگام حذف مشتری
Restrict اگر موجودیت فرزند وجود داشته باشد، حذف والد مجاز نیست. خطای ReferentialIntegrityException دریافت می‌شود. جلوگیری از حذف دسته‌بندی که محصول دارد
SetNull هنگام حذف والد، کلید خارجی فرزند null می‌شود (در صورت nullable بودن FK). حذف مدیر، اما نگه‌داشتن پروژه بدون مدیر

تنظیم OnDelete با Fluent API

در این مثال، اگر یک شرکت حذف شود، کلید خارجی کارمندان آن به null تبدیل می‌شود.

modelBuilder.Entity<Company>()
.HasMany(c => c.Employees)
.WithOne(e => e.Company)
.HasForeignKey(e => e.CompanyId)
.OnDelete(DeleteBehavior.SetNull);

چرا Data Annotation برای OnDelete کافی نیست؟

بر خلاف سایر تنظیمات مانند [Required] یا [MaxLength]، رفتار حذف (OnDelete) فقط با Fluent API قابل کنترل است و از طریق Data Annotation امکان‌پذیر نیست.

بررسی Migration و نتیجه در پایگاه داده

پس از اجرای دستور Add-Migration. در فایل migration کدی مشابه زیر مشاهده می‌شود. و در دیتابیس، Foreign Key با رفتار حذف تعیین‌شده ایجاد خواهد شد.

onDelete: ReferentialAction.SetNull

مدیریت خطاهای

حذف در زمان حذف موجودیت‌ها با رفتار Restrict یا در شرایط همزمانی، باید با استفاده از try-catch خطاها مدیریت شوند.

try
{
_context.Companies.Remove(company);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
TempData["Error"] = "خطای همزمانی رخ داده است. لطفاً دوباره تلاش کنید.";
}
catch (DbUpdateException ex)
{
if (ex.InnerException?.Message.Contains("REFERENCE constraint") == true)
TempData["Error"] = "امکان حذف این شرکت وجود ندارد چون به آن کارمند اختصاص داده شده است.";
else
TempData["Error"] = "خطایی هنگام ذخیره اطلاعات رخ داد. لطفاً دوباره تلاش کنید.";
}
catch (Exception ex)
{
TempData["Error"] = "خطای ناشناخته‌ای رخ داده است: " + ex.Message;
}

نتیجه‌گیری

درک و تنظیم صحیح رفتار حذف، نقش کلیدی در امنیت و پایداری داده‌ها دارد. با استفاده درست از آن‌ها می‌توان از بروز بسیاری از خطاهای منطقی و امنیتی جلوگیری کرد.

جستجو کنید
دسترسی سریع
دسته ها

طراحی و پیاده سازی پروژه های طراحی سایت دانشجویی

انجام، اجرا و طراحی پروژه های طراحی سایت برای دانشجویان با HTML CSS PHP ASP.NET JAVA و ... با کمترین هزینه. برای مشاهده نمونه کارها و یا دریافت مشاوره رایگان از تیم طراحی سایت تهران آی تی با ما در تماس باشید. ما بهترین پروژه های طراحی سایت را با حداقل هزینه برای شما طراحی میکنیم - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

مطالب مرتبط

لطفا از مطالب مرتبط با این پست دیدن فرمایید

جــذاب های هفته

از پربازدیدترین مطالب تهران آی تی در هفته ای که گذشت دیدن فرمایید

باورکردنی نیست فقط با 300 هزار تومان

طراحی سایت شما + طراحی اپلیکیشن هدیه و رایگان
این یک حراج است در مدت زمان محدود - شرکت های زیادی سایت های ارزان طراحی میکنند اما آیا کیفیت لازم را دارا هستند؟ طراحی سایت ارزان به همراه اپلیکیشن رایگان هدیه برای اولین بار توسط تهران آی تی مخصوص سازمان ها و کسب و کار های کوچک و بزرگ و حتی جدید تیم طراحی سایت تهران آی تی در کنار شماست تا شناخته شوید - مشاوره رایگان 09121486770

مــشاوره و مشاهده نمونه کارها

پشتیبانی 24 ساعته

تیم تهران آی تی در هفت روز هفته و 24 ساعت روز آماده پاسخ گویی به سوالات کاربران و ارائه مشاره رایگان میباشد