در این پست از وبسایت پرووید در رابطه با Convention های رابطه های One-to-Many در Entity Framework Core #1 صحبت خواهیم کرد. تکنولوژی Entity Framework Core نسل بعدی Entity Framework است که توسط مایکروسافت معرفی شده است.

آموزش convention های relationship های one-to-many در Entity Framework Core

در یکی از قسمت های قبلی از این آموزش از وبسایت پرووید در رابطه با convention هایی که در Entity Framework Core به منظور map کردن entity class ها به object های مختلفی از دیتابیس وجود دارند صحبت کردیم. و اما در این آموزش از وبسایت پرووید در رابطه با convention هایی که در رابطه با relationship‌ ها در Entity Framework Core وجود دارند صحبت خواهیم کرد. این convention ها بین دو entity class قرار می‌ گیرند و منجر به انواع relationship ها بین table های دیتابیس خواهند شد.

اگر تجربه کار کردن با relationship ها در Entity Framework 6 را دارید باید بگوییم که خوشبختانه بحث مربوط به convention‌ های مربوط به relationship‌ ها در Entity Framework Core شبیه به Entity Framework 6 می باشد. تنها تفاوت این است که در Entity Framework Core یک ستون برای foreign key با همان نام یکسانی که برای navigation property در نظر گرفته اید ساخته می شود و نه با الگوی <NavigationPropertyName>_<PrimaryKeyPropertyName>

بسته ی آموزش شروع به کار با Entity Framework Core

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی شروع به کار با Entity Framework Core 2.0 دیدن کنید.

خب در ادامه بیایید نگاهی به convention های مختلفی که به صورت خودکار یک relationship از نوع one-to-many را بین دو entity class با نام ‌های Student و Grade شکل می ‌دهند نگاهی بیندازیم. لطفاً کد زیر را ببینید.

public class Student
{
    public int StudentId { get; set; }
    public string StudentName { get; set; }
}
       
public class Grade
{
    public int GradeId { get; set; }
    public string GradeName { get; set; }
    public string Section { get; set; }
}

بعد از اعمال convention های مربوط به relationship های one-to-many در entity های بالا جداول دیتابیس برای entity class های Student و Grade شبیه به تصویر زیر خواهند بود. به منظور کسب اطلاعات بیشتر در حوزه ی بانک های اطلاعاتی رابطه ای توصیه می کنیم بسته ی آموزش ویدئویی اصول بانک های اطلاعاتی رابطه ای را استفاده کنید.

همانطور که در تصویر زیر میبینید table هایی با نام‌ های Students و Grades تشکیل شده اند و یک foreign key با اسم GradeId در جدول Students تعریف شده است.

بسته ی آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری

از شما دعوت می کنیم که از بسته ی آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری دیدن کنید.

بررسی اولین convention در پیاده‌سازی relationship ها در Entity Framework Core

دقت کنید که ما قصد داریم یک relationship از نوع one-to-many بین دو entity class با نام ‌های Student و Grade تشکیل بدهیم. به عبارت دیگر هر Student فقط یک Grade دارد اما هر Grade می‌تواند برای چندین Student در نظر گرفته شود. برای پیاده‌سازی این موضوع کافی است که یک navigation property از نوع Grade را در Student تعریف کنید.

دقت کنید که به Student در این رابطه dependent entity یا موجودیت وابسته نیز میگویند و به Grade هم principal entity یا موجودیت اصلی نیز می‌ گویند. این دو واژه را توصیه می کنیم که حتما یاد بگیرید. کدی که در قسمت زیر مشاهده می ‌کنید نحوه پیاده سازی این موضوع را نشان می‌دهد.

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
   
    public Grade Grade { get; set; }
}

public class Grade
{
    public int GradeId { get; set; }
    public string GradeName { get; set; }
    public string Section { get; set; }
}

همانطور که در این کد می بینید Student حاوی یک reference navigation property از نوع Grade می‌باشد. این موضوع به ما این امکان را می‌ دهد که یک object یکسان از Grade را به چندین object از Student مرتبط کنید و یک relationship از نوع one-to-many بین آنها را تشکیل بدهیم. این موضوع باعث ایجاد شدن یک relationship از نوع one-to-many بین جداول Students و Grades در دیتابیس می ‌شود که بر اساس آن جدول Students شامل یک فیلد برای nullable foreign key به اسم GradeId می باشد. این موضوع در تصویر زیر نیز نشان داده شده است.

موضوع دیگر اینکه Entity Framework Core یک shadow property را برای foreign key با نام GradeId در conceptual model ایجاد خواهد کرد که به ستون GradeId که در جدول Students قرار دارد map می ‌شود. موضوع دیگری که باید به آن توجه کنید این است که reference property ای که با نام Grade در Student تعریف شد nullable می باشد. یعنی کلید خارجی ما که با نام GradeId در جدول Students تشکیل خواهد شد می تواند برای بعضی از رکوردها null باشد. با استفاده از fluent API و configuration های مختلفی که می توانیم انجام دهیم می‌توانیم یک foreign key را NotNull در نظر بگیریم.

در قسمت بعدی از این آموزش در رابطه با convention دوم و سوم صحبت خواهیم کرد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *