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


پیکربندی relationship های one-to-many در Entity Framework Core با استفاده از Fluent API

در قسمت‌های قبلی از این آموزش از وبسایت پرووید یاد گرفتید که Entity Framework Core حاوی convention های مختلفی برای انجام پیکربندی های مربوط به relationship های one-to-many است. به طور کلی شما نیازی به انجام پیکربندی های اضافه برای این relationship‌ ها ندارید چرا که Entity Framework Core به اندازه کافی هوشمند است تا بتواند تمامی این پیکر بندی ها را به صورت خودکار برای شما انجام دهد.

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

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

اما در شرایطی نیز شاید نیاز باشد که این پیکر بندی ها را خود شما انجام دهید. خوشبختانه با استفاده از Fluent API در Entity Framework Core می‌توانیم این پیکر بندی ها را برای relationship های one-to-many به سادگی انجام دهیم. در این قسمت از این آموزش از وبسایت پرووید در رابطه با این موضوع صحبت خواهیم کرد. بیایید کار را در قالب یک مثال آغاز کنیم. خواهید دید که Entity Framework Core انجام پیکربندی های مختلف برای relationship ها را با استفاده از Fluent API بسیار ساده کرده است.

در کد زیر entity های Student و Grade را مشاهده می‌کنید که بین آنها یک relationship از نوع one-to-many وجود دارد. در واقع می‌توانیم بگوییم که Grade شامل تعداد زیادی Student می باشد.

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

    public int CurrentGradeId { 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; }

    public ICollection<Student> Students { get; set; }
}

و اما برای انجام پیکربندی های مربوط به این relationship با استفاده از Fluent API باید متد OnModelCreating را در کلاس context به سادگی override کنیم. این موضوع در کد زیر نشان داده شده است. در بسته ی آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری در این رابطه بیشتر صحبت کرده ایم.

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<Grade>(s => s.Grade)
            .WithMany(g => g.Students)
            .HasForeignKey(s => s.CurrentGradeId);
    }

    public DbSet<Grade> Grades { get; set; }
    public DbSet<Student> Students { get; set; }
}

در کدی که در قسمت بالا مشاهده کردید تکه کد مربوط به پیکربندی این relationship در قسمت زیر مشاهده می شود.

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

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

modelBuilder.Entity<Student>()
    .HasOne<Grade>(s => s.Grade)
    .WithMany(g => g.Students)
    .HasForeignKey(s => s.CurrentGradeId);

در کدی که در قسمت بالا می‌بینید بدنه با استفاده از این پیکربندی جداولی شبیه تصویر زیر در دیتابیس ایجاد می شود.

در قسمت بعدی از این آموزش در رابطه با پیکر بندی Cascade Delete با استفاده از Fluent API صحبت خواهیم کرد.

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

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