آموزش Inheritence در EF Core

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

آموزش Inheritence در EF Core

وراثت یا Inheritance در EF Core ابزاری قدرتمند برای مدل‌سازی مفاهیم پیچیده، کاهش تکرار، و افزایش خوانایی و توسعه‌پذیری پروژه‌هاست. و در آموزش جامع Inheritance در EF Core و Asp.Net Core، با استفاده از مثال واقعی و با استراتژی TPH با Inheritance آشنا میشوید.

مفهوم Inheritance در EF Core

وراثت یا Inheritance در EF Core به معنای پیاده‌سازی ساختارهای شی‌ء‌گرا در سطح پایگاه‌داده است که به ما اجازه می‌دهد کلاس پایه‌ای مانند Contract تعریف کرده و کلاس‌های مشتق مثل MobileContract و TvContract از آن ارث‌بری کنند. EF Core این ساختار را با سه استراتژی TPH (ذخیره تمام کلاس‌ها در یک جدول با ستون Discriminator)، TPT (ایجاد جدول جدا برای هر کلاس) و TPC (ایجاد جدول فقط برای کلاس‌های مشتق) پشتیبانی می‌کند. این ویژگی باعث می‌شود کد ما منظم‌تر، قابل نگهداری‌تر و نزدیک‌تر به اصول طراحی شی‌ء‌گرا باشد، در حالی که EF Core به‌طور هوشمند نحوه نگهداری داده‌ها را در دیتابیس مدیریت می‌کند.

چرا باید ازInheritance در EF Core استفاده کنیم؟

  • کاهش تکرار کد (DRY Principle)
  • ساختاردهی بهتر به مدل‌های دامنه
  • تسهیل توسعه و نگهداری پروژه
  • هماهنگی با اصول OOP و SOLID
  • پشتیبانی مستقیم EF Core از وراثت
  • امکان ایجاد API و ViewModelهای تمیزتر

استراتژی های Inheritance در EF Core

  • یک جدول برای تمام کلاس‌های وراثتی یا TPH که مخفف Table Per Hierarchy میباشد. تمام داده‌های کلاس پایه و کلاس‌های مشتق در یک جدول واحد ذخیره می‌شود، با یک ستون جداکننده (Discriminator) برای تشخیص نوع رکورد. از مزایای آن میتوان به سریع‌ترین عملکرد، ساده‌ترین پیاده‌سازی، یک جدول واحد اشاره کرد. و از معایب آن میتوان به ستون‌های اضافی برای کلاس‌های غیرمرتبط، ممکن است null زیاد باشد اشاره کرد.
  • یک جدول جدا برای هر کلاس از زنجیره‌ی وراثت یا TPT که مخفف Table Per Type میباشد. هر کلاس یک جدول جداگانه دارد. هر کلاس (چه پایه و چه مشتق) یک جدول جداگانه ساخته می‌شود، و داده‌ها با استفاده از JOIN به هم متصل می‌شوند. از مزایای آن میتوان به ساختار دیتابیس منعطف‌تر، بهینه برای گزارش‌گیری اشاره کرد. و از معایب آن میتوان به کندی عملکرد به‌خاطر JOIN زیاد، پیچیدگی در کوئری‌ها اشاره کرد.
  • جدول برای هر کلاس مشتق قابل نمونه‌سازی یا TPC که مخفف Table Per Concrete Type میباشد. فقط برای کلاس‌های مشتق (concrete classes) جدول ساخته می‌شود. کلاس پایه جدول ندارد. داده‌ها به‌صورت مستقل در هر جدول ذخیره می‌شوند. از مزایای آن میتوان به عدم وجود null و ستون‌های بی‌ربط، سریع برای کلاس خاص اشاره کرد. و از معایب آن میتوان به داده‌ها تکراری می‌شوند، عدم پشتیبانی از shared logic در SQL، تا EF Core 5 پشتیبانی نمی‌شد اشاره کرد.

مدل Contract

public abstract class Contract
{
public int Id { get; set; }
public required string CustomerName { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
public class MobileContract:Contract
{
public bool Has5G { get; set; }
}
public class TvContract: Contract
{
public bool HasSportsPackage { get; set; }
}

چرا از abstract در کلاس پایه استفاده شد؟

  • جلوگیری از ساختن نمونه (Instance) مستقیم
  • جلوگیری از ذخیره رکورد بدون نوع مشخص
  • پشتیبانی بهتر EF Core از TPH در حالت abstract

تنطیمات DbSet در DatabaseContext

public DbSet<Contract> Contracts { get; set; }
public DbSet<MobileContract> MobileContracts { get; set; }
public DbSet<TvContract> TvContracts { get; set; }

تنطیمات Fluent Api در DatabaseContext

modelBuilder.Entity<Contract>()
.HasDiscriminator<string>("ContractType")
.HasValue<MobileContract>("Mobile")
.HasValue<TvContract>("TV");

در زمان کدنویسی ما جدولی با نام Contract نداریم و برای کدنویسی می‌توانیم از مقدار MobileContract و TvContract استفاده کنیم.

در دیتابیس جدولی با نام MobileContract و TvContract نداریم و فقط یک جدول داریم و نام آن هم Contract است.

به طور مثال میتوانیم ویو مدلی با نام TVContractVmnhaji fhadl. و شامل مقادیر جدول پایه و جدول مشتق شده باشد.

از آنجایی که به MobileContract و TvContract دسترسی داریم پس به راحتی می‌توانیم از AutoMapper استفاده کنیم.

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

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

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

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

مطالب مرتبط

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

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

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

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

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

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

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

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