در این آموزش به روابط یک به یک در EF Core به زبان ساده میپردازیم. ارتباط یک به یک (One-to-One) زمانی است که هر رکورد در یک جدول تنها با یک رکورد در جدول دیگر مرتبط است. به عنوان مثال، فرض کنید در یک سیستم مدیریت دانشجویان، هر دانشجو (Student) دقیقاً یک کارت دانشجویی (StudentCard) داشته باشد. مانند تصویر زبر
ارتباط یک به یک وقتی استفاده میشود که هر رکورد در یک جدول فقط به یک رکورد در جدول دیگر مرتبط باشد.
از ارتباط یک به یک برای جدا کردن دادههای اضافی یا اختیاری، محافظت از اطلاعات حساس، و جلوگیری از تکرار دادهها استفاده میشود.
ارتباط یک به یک به مرتبتر شدن پایگاه داده و امنیت بیشتر کمک میکند.
ارتباط یک به یک وقتی استفاده میشود که هر رکورد در یک جدول فقط به یک رکورد در جدول دیگر مرتبط باشد. از این روش برای جدا کردن دادههای اضافی یا اختیاری، محافظت از اطلاعات حساس، و جلوگیری از تکرار دادهها استفاده میشود. همچنین اگر بخشی از دادهها چرخه عمر متفاوتی داشته باشند یا کمتر استفاده شوند، میتوان آنها را در یک جدول جدا ذخیره کرد. این کار به مرتبتر شدن دیتابیس و امنیت بیشتر کمک میکند.
ابتدا کلاسهای Student و StudentCard را تعریف میکنیم. که نمایانگر جداول دیتابیس هستند.
public class Student
{
public int Id { get; set; }
public required string Name { get; set; }
public required string Email { get; set; }
//Navigation Property
public required StudentCard StudentCard { get; set; }
}
public class StudentCard
{
public int Id { get; set; }
public required string CardNumber { get; set; }
public required DateTime RegisterCard { get; set; }
//foreign key
public required int StudentId { get; set; }
//Navigation Property
public required Student Student { get; set; }
}
public class StudentViewModel
{
public int Id { get; set; }
public required string Name { get; set; }
public required string Email { get; set; }
public required StudentCardViewModel StudentCard { get; set; }
}
public class StudentCardViewModel
{
public required string CardNumber { get; set; }
public required DateTime RegisterCard { get; set; }
}
public DbSet<Student> Students { get; set; }
public DbSet<StudentCard> StudentCards { get; set; }
modelBuilder.Entity<Student>()
.HasOne(s=>s.StudentCard)
.WithOne(s=>s.Student)
.HasForeignKey<StudentCard>(sc=>sc.StudentId)
.OnDelete(DeleteBehavior.Cascade);
}
در سناریوی ارتباط یک به یک (One-to-One)، کلید خارجی در جدولی تعریف میشود که به عنوان وابسته در نظر گرفته میشود، و این بستگی به طراحی و سناریوی کسبوکاری دارد. در مثال Student و StudentCard، دلیل اینکه کلید خارجی در جدول StudentCard تعریف شده، این است که:
Student به عنوان موجودیت اصلی شناخته میشود، زیرا هر دانشجو میتواند بدون کارت دانشجویی وجود داشته باشد. اما هر کارت دانشجویی وابسته به یک دانشجو است. و بدون دانشجو معنا ندارد. بنابراین، کلید خارجی (StudentId) در موجودیت وابسته (StudentCard) قرار میگیرد. تا نشان دهد این رکورد به کدام دانشجو مرتبط است.
Navigation Property برای ارتباط بین جداول (یا Entityها) در دیتابیس استفاده میشود. این ویژگی به شما اجازه میدهد که از یک موجودیت (Entity) به موجودیت مرتبط دیگر دسترسی داشته باشید.
یک خسته نباشید ویژه خدمت دوست و استاد محترم بخاطر اموزش های روان و عالی شما، با اشتیاق منتظر قسمت های بعدی هستیم