
پیادهسازی روابط یک به چند در EF Core
روابط یک به چند در EF Core چیست ؟ رابطه یک به چند (One-to-Many) به این معناست که یک موجودیت (Entity) میتواند چندین موجودیت دیگر را داشته باشد، اما هر یک از آن موجودیتها فقط به یک موجودیت از نوع اول مرتبط هستند. در این آموزش ، یک رابطه یک به چند (One-to-Many) بین دانشجو (Student) و شمارههای تماس (Phone) تعریف میکنیم. به این معنی که هر دانشجو میتواند چندین شماره تماس داشته باشد، اما هر شماره تماس فقط به یک دانشجو مرتبط است.
در چه زمانی از ارتباط یک به چند استفاده کنیم؟
ارتباط یک به چند زمانی استفاده میشود که یک موجودیت اصلی میتواند چندین زیرمجموعه یا داده وابسته داشته باشد، اما هر یک از این دادههای وابسته فقط به یک موجودیت اصلی مرتبط باشند. هر زمان که یک موجودیت باید چندین مقدار مرتبط داشته باشد، اما هر مقدار فقط به یک موجودیت خاص مرتبط است، از رابطه یک به چند (One-to-Many) استفاده میکنیم.
تعریف مدل ها
ابتدا کلاسهای Student و Phone را تعریف میکنیم. که نمایانگر جداول دیتابیس هستند.
مدل Student
public class Student
{
public int Id { get; set; }
public required string Name { get; set; }
public required string Family { get; set; }
public required string Email { get; set; }
//Navigation Property
public ICollection<Phone>? Phones { get; set; }
}مدل Phone
public class Phone
{
public int Id { get; set; }
public required string PhoneNumber { get; set; }
public required PhoneType PhoneType { get; set; }
//Navigation Property
public int StudentId { get; set; }
public required Student Student { get; set; }
}
public enum PhoneType
{
[Display(Name = "خانه")]
Home,
[Display(Name = "کار")]
Work,
[Display(Name = "تلفن همراه")]
Mobile
}تعریف ویو مدل ها
ویو مدل Student
public class StudentViewModel
{
public int Id { get; set; }
public required string Name { get; set; }
public required string Family { get; set; }
public required string Email { get; set; }
public ICollection<Phone>? Phones { get; set; }
}ویو مدل Phone
public class PhoneViewModel
{
public int Id { get; set; }
public required string PhoneNumber { get; set; }
public string? FullName { get; set; }
public required PhoneType PhoneType { get; set; }
public int StudentId { get; set; }
}تنظیمات DbContext
ثبت مدل ها
public DbSet<Student> students { get; set; }
public DbSet<Phone> Phones { get; set; }افزودن تنطیمات ارتباط یک به چند
modelBuilder.Entity<Student>()
.HasMany(s => s.Phones)
.WithOne(p => p.Student)
.HasForeignKey(p => p.StudentId)
.OnDelete(DeleteBehavior.Cascade);- متد HasMany : این متد مشخص میکند که یک دانشجو (Student) میتواند چندین شماره تماس (Phone) داشته باشد.
- متد WithOne : این متد نشان میدهد که هر شماره تماس (Phone) فقط به یک دانشجو (Student) مرتبط است.
- متد HasForeignKey : این متد مشخص میکند که کلید خارجی (Foreign Key) در جدول Phone فیلد StudentId است.
- متد OnDelete : این متد تعیین میکند که اگر یک دانشجو حذف شود (Student)، تمام شمارههای مرتبط با او (Phone) نیز بهطور خودکار حذف شوند.
































فرم افزودن دیدگاه
با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.