پیاده سازی وراثت (Inheritance) در Entity Framework Code First


به عبارت دیگر به ازای هر domain class که به صورت concrete تعریف بشود یک table در دیتابیس ایجاد خواهد شد. البته می‌توانیم domain class های مربوط به برنامه را با استفاده از وراثت پیاده سازی کنیم. در زبان های برنامه نویسی شی گرا از قبیل سی شارپ روابط به دو دسته has a و is a دسته بندی می شود. در صورتی که یک relational model فقط رابطه has a را پشتیبانی می کند. سیستم های مدیریت دیتابیس که اصطلاحاً به آن ها database management system نیز می‌گویند از type inheritance پشتیبانی نمی کنند. پس سوالی که اینجا مطرح می‌شود این است که چگونه می توانیم domain class های شی گرا خود را به بانک‌های اطلاعاتی رابطه ای نگاشت کنیم. در قسمت زیر سه روش مختلف برای پیاده‌سازی وراثت موجود بین domain class ها را در دیتابیس مطرح خواهیم کرد.

روش Table per Hierarchy و یا اصطلاحاً TPH: همانطور که از نام این روش مشخص است یک جدول تک به ازای تمام سلسله مراتب وراثت ما بین کلاس ها ایجاد می‌شود. در این روش table دارای یک ستون تمیز دهنده و یا اصطلاحاً discriminator column می باشد که کلاس های موجود در سلسله مراتب وراثت را از یکدیگر تمیز می دهد. این روش نگاشت، روشی است که به صورت پیش فرض در Entity Framework مورد استفاده قرار می گیرد.

روش Table per Type و یا اصطلاحاً TPT: با استفاده از این روش به ازای هر domain class یک table مجزا در دیتابیس تولید می شود.

روش Table per Concrete Class و یا اصطلاحاً TPC: با استفاده از این روش به ازای هر concrete class یک table ساخته می شود. البته به ازای abstract class ها هیچ table خاصی ایجاد نمی گردد. ضمناً اگر چندین concrete class از یک abstract class ارث بری کند سپس تمامی property های مربوط به abstract class بخشی از table مورد نظر که به ازای هر concrete class ایجاد می‌شوند خواهد بود.

منبع: وبسایت پرووید