Skip to content

ManyToMany

Marcin Sulecki edited this page Apr 4, 2017 · 6 revisions

Relacja wiele-do-wielu

Domyślna konwencja

Model

 public class Employee
    {
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public ICollection<Project> Projects { get; set; }
    }

public class Project
    {
        public int ProjectId { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Employee> Employees { get; set; }
    }

EF automatycznie utworzy tabelę pośredniczącą wraz kluczami obcymi:

Fluent API

To samo można otrzymać za pomocą konfiguracji:

   modelBuilder.Entity<Project>()
                .HasMany(e => e.Employees)
                .WithMany(e => e.Projects);

Jeśli zamienimy miejscami pola otrzymamy inną nazwę tabeli

modelBuilder.Entity<Employee>()
                .HasMany(e => e.Projects)
                .WithMany(e => e.Employees);

Zmiana nazwy tabeli pośredniczącej

Konfiguracja

modelBuilder.Entity<Employee>()
                .HasMany(e => e.Projects)
                .WithMany(e => e.Employees)
                .Map(m=>
                {
                    m.ToTable("EmployeesInProject");
                });

Zmiana nazwy pól tabeli pośredniczącej

modelBuilder.Entity<Employee>()
                .HasMany(e => e.Projects)
                .WithMany(e => e.Employees)
                .Map(m=>
                {
                    m.MapLeftKey("EmployeeId");
                    m.MapRightKey("ProjectId");
                });

Zmiana nazwy tabeli i pól

modelBuilder.Entity<Employee>()
                .HasMany(e => e.Projects)
                .WithMany(e => e.Employees)
                .Map(m=>
                {
                    m.ToTable("EmployeesInProject");
                    m.MapLeftKey("EmployeeId");
                    m.MapRightKey("ProjectId");
                });

Clone this wiki locally