آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

آموزش قراردادهای نوشتاری برای تعریف ارتباط یک به چند در Entity Framework Core

دوره های مرتبط با این مقاله

قراردادهای نوشتاری برای تعریف ارتباط یک به چند در Entity Framework Core

آموزش قراردادهای نوشتاری برای تعریف ارتباط یک به چند در Entity Framework Core

در بخش قبل به قراردادهای نوشتاری EF برای نگاشت موجودیت ها به object های درون Data Base پرداختیم. حال درمورد ارتباطات بین موجودیت ها که باعث ارتباط های یک به چند در بین جداول متناظر آن ها در Data Base می شود.

Entity Framework Core به همان صورت EF 6 روابط یک به چند را تعریف می کند. تنها تفاوت این است که EF Core یک ستون کلید خارجی می سازد و نامی مشابه navigation property خواهد داشت. (نه به صورت < NavigationPropertyName>_< PrimaryKeyPropertyName>)

بیایید به روش های مختلف تعریف روابط یک به چند بین دو موجودیت 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; }
}

جداولی که برای این دو موجودیت ساخته می شود به صورت زیر است، و جدول Students حاوی کلید خارجی GradeId است.


ارتباط یک به چند در Entity Framework Core

شیوه اول

می خواهیم یک ارتباط یک به چند ایجاد کنیم که مطابق آن چند دانشجو با یک نمره در ارتباطند. این ارتباط را می توان با قراردادن یک navigation property در موجودیت وابسته به شکل زیر ایجاد کرد. در اینجا موجودیت Student وابسته است و موجودیت Grade اصلی است.


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 حاوی یک navigation property از نوع Grade است. این به ما اجازه می دهد یک Grade را به چندین موجودیت Student ربط دهیم که یک ارتباط یک به چند بین آن ها برقرار شود. در Data Base یک ارتباط یک به چند بین این دو برقرار می شود و جدول Students یک کلید خارجی nullable به نام GradeId دارد. EF Core یک shadow property برای کلید خارجی با نام GradeId در conceptual model می سازد که به ستون کلید خارجی GradeId در جدول Student نگاشت می شود.


ارتباط یک به چند در Entity Framework Core

نکته: Grade Property تعریف شده در Student، nullable است، پس ستون کلید خارجی آن در جدول Students نیز nullable است. می توانید NotNull بودن را با استفاده از fluent API تعیین کنید.

شیوه دوم

روش دوم قرار دادن یک collection navigation property درون موجودیت اصلی است به شیوه ای که دز زیر می بینید:


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; }
    public ICollection< Student > Students { get; set; } 
}

در مثال بالا، موجودیت Grade حاوی یک collection navigation property از نوع ICollection< Student > است. وجود این پراپرتی به ما امکان می دهد چند موجودیت Student به Grade اضافه کنیم که نتیجه آن یک رابطه یک به چند خواهد بین آن دو خواهد بود.

روش سوم

یک روش دیگر تعریف رابطه ی یک به چند این است که navigation property را در هر دو سمت رابطه قرار دهیم. (ترکیب روش اول و دوم)


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 ICollection< Student > Students { get; set; }
}

در مثال بالا، موجودیت Student حاوی یک navigation property از نوع Grade است. موجودیت Grade نیز حاوی یک collection navigation property ICollection < Student > است. نتیجه این نوع تعریف ارتباط یک به چند بین این دو جدول است.

روش چهارم

می توان ارتباط را در دو سمت رابطه به طور کامل تعریف کرد، و کلید خارجی را در موجودیت وابسته گذاشت:


public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int GradeId { get; set; }
    public Grade Grade { get; set; }
}
public class Grade
{
    public int GradeId { get; set; }
    public string GradeName { get; set; }
    public ICollection< Student > Students { get; set; }
}

در مثال بالا موجودیت Student حاوی یک کلید خارجی GradeId از نوع int و یک navigation property به نام Grade است. در سمت دیگر رابطه، موجودیت Grade حاوی یک collection navigation property ICollection< Student > است. این نحوه تعریف نیز یک رابطه ی یک به چند بین دو موجودیت ایجاد می کند و ستون کلید خارجی NotNull در جدول Student ایجاد می شود.


ارتباط یک به چند در Entity Framework Core

اگر می خواهید کلید خارجی GradeId را nullable تعریف کنید، نوع int را nullable تعریف کنید (Nullable or int?).


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

این شیوه های تعریف به طور خودکار به روابط یک به چند تبدیل می شوند. اگر موجودیت ها در یکی از شیوه های تعریف بالا نمی گنجند، از Fluent API برای ایجاد ارتباط یک به چند بین آن ها استفاده کنید.

  • 235
  •    100
  • تاریخ ارسال :   1398/06/22

دانلود سورس کد دانلود فیلم آموزشی دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .