Реализация связи многие ко многим в EntityFramework

Создаю проект на ASP.net Core. У меня есть работники, которые могут работать над несколькими проектами и проекты, над которыми могут работать несколько работников. Создал следующие классы:

public class Project
{
    public int Id { get; set; }
    public string? ProjectName { get; set; }
    public string? CustomerCompany {  get; set; }
    public string? ExecutorCompany { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public int Priority { get; set; }
    public int? ProjectManagerId { get; set; }
    public Employee? ProjectManager { get; set; }
    public List<Employee> Employees { get; set; } = new();
    public List<EmployeeProject> EmployeeProjects { get; set; } = new();
}
public class Employee
{
    public int Id { get; set; }
    public string? FirstName {  get; set; }
    public string? Surname { get; set; }
    public string? Patronymic { get; set; }
    public string? Email { get; set; }
    public List<Project> Projects { get; set; } = new();
    public List<EmployeeProject> EmployeeProjects { get; set; } = new();
}
public class EmployeeProject
{
    public int EmployeeId { get; set; }
    public Employee? Employee { get; set; }

    public int ProjectId { get; set; }
    public Project? Project { get; set; }
}
public class AppDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; } = null!;
    public DbSet<Project> Projects { get; set; } = null!;

    public AppDbContext(DbContextOptions<AppDbContext> options): base(options)
    {
        Database.EnsureDeleted();
        Database.EnsureCreated();
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>().HasData(
            new Employee { Id = 1, FirstName = "Tom", Surname = "A" },
            new Employee { Id = 2, FirstName = "Bob", Surname = "B" },
            new Employee { Id = 3, FirstName = "Sam", Surname = "С" });

        modelBuilder.Entity<Project>().HasData(
            new Project { Id = 1, ProjectName = "Project 1", },
            new Project { Id = 2, ProjectName = "Project 2", });

        modelBuilder.Entity<EmployeeProject>().HasData(
            new EmployeeProject { EmployeeId = 1, ProjectId = 1 },
            new EmployeeProject { EmployeeId = 1, ProjectId = 2 });

        modelBuilder
            .Entity<Project>()
            .HasMany(c => c.Employees)
            .WithMany(s => s.Projects)
            .UsingEntity<EmployeeProject>(
               j => j
                .HasOne(pt => pt.Employee)
                .WithMany(t => t.EmployeeProjects)
                .HasForeignKey(pt => pt.EmployeeId),
            j => j
                .HasOne(pt => pt.Project)
                .WithMany(p => p.EmployeeProjects)
                .HasForeignKey(pt => pt.ProjectId),
            j =>
            {
                j.HasKey(t => new { t.ProjectId, t.EmployeeId });
                j.ToTable("EmployeeProjects");
            });

        modelBuilder
            .Entity<Project>()
            .HasOne(c => c.ProjectManager)
            .WithMany()
            .HasForeignKey(p => p.ProjectManagerId)
            .IsRequired(false);
    }
}

Когда я запускаю метод app.MapGet("/", (AppDbContext db) => db.Employees.ToList()) у меня ожидаемо в списке проектов у работников ничего нет. Как мне правильно реализовать связи, чтобы я мог без проблем потом обрабатывать запросы и передавать информацию о работниках через JSON?


Ответы (0 шт):