مشخصات مقاله
-
555
-
0.0
-
3033
-
0
-
0
آموزش نحوه Configuration Convention One To One به کمک Fluent API در Entity Framework Core
آموزش نحوه تعیین روابط یک به یک به کمک Fluent API در Entity Framework Core
آموزش نحوه تعیین روابط یک به یک به کمک Fluent API در Entity Framework Core
در این بخش نحوه تعریف روابط یک به یک را به کمک Fluent API بین دو موجودیت آموزش می دهیم.
معمولا قراردادهای نوشتاری EF Core برای تعریف رابطه یک به یک بین موجودیت ها کافی است. با این حال، پراپرتی های کلید یا کلید خارجی به صورتی که قرارداد شده تعریف نشده اند، می توانید از annotation attribute ها و یا Fluent API برای تعریف روابط یک به یک استفاده کنید.
می خواهیم بین دو موجودیت Student و StudentAddress یک رابطه یک به یک تعیین کنیم:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public StudentAddress Address { get; set; }
}
public class StudentAddress
{
public int StudentAddressId { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Country { get; set; }
public int AddressOfStudentId { get; set; }
public Student Student { get; set; }
}
برای تعیین رابطه یک به یک بین این دو موجودیت که به صورت بالا تعریف ششده اند، از متدهای WithOne و HasOne و HasForeignKey به صورت زیر استفاده می کنیم:
public class SchoolContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=.\\SQLEXPRESS;Database=EFCore-SchoolDB;Trusted_Connection=True");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity< Student >()
.HasOne< StudentAddress >(s => s.Address)
.WithOne(ad => ad.Student)
.HasForeignKey< StudentAddress >(ad => ad.AddressOfStudentId);
}
public DbSet< Student > Students { get; set; }
public DbSet< StudentAddress > StudentAddresses { get; set; }
}در مثال بالا کد زیر رابطه ی یک به یک را تعیین می کند:
modelBuilder.Entity< Student >()
.HasOne< StudentAddress >(s => s.Address)
.WithOne(ad => ad.Student)
.HasForeignKey< StudentAddress >(ad => ad.AddressOfStudentId);
بیایید مرحله به مرحله این کد را تحلیل کنیم:
- با
modelBuilder.Entity< Student >()از سمت موجودیت Student کانفیگ کردن را شروع می کنیم. - متد
.HasOne< StudentAddress >(s => s.Address)تعیین می کند که یک موجودیت Student حاوی یک property از نوع StudentAddress است. - متد
.WithOne(ad => ad.Student)سمت دیگر رابطه را تعیین می کند و مشخص می کند که موجودیت StudentAddress حاوی یک property از نوع Student است. - متد
.HasForeignKey< StudentAddress >(ad => ad.AddressOfStudentId)نام کلید خارجی را تعیین می کند.
کد بالا جدول های زیر را در دیتابیس می سازد:
شکل زیر این مراحل را نشان می دهد:
می توانید تعریف رابطه یک به یک را از سمت StudentAddress شروع کنید:
modelBuilder.Entity< StudentAddress >()
.HasOne< Student >(ad => ad.Student)
.WithOne(s => s.Address)
.HasForeignKey< StudentAddress >(ad=> ad.StudId);