Entity Framework 配置关系(N对N)
这里介绍N:N配置关系。
举例说明:一个教师Teacher会带很多个学生Student,一个学生也同时会有很多个教师。从教师的角度来观察,教师Teacher与学生Student的关系是一个教师Teacher对应多个学生(1:N)。从学生的角度来观察,一个学生对应多个教师(1:N)。
(1)实体类
1 public class Teacher 2 { 3 public int Id { get; set; } 4 5 public string Name { get; set; } 6 7 public ICollection<Student> Students { get; set; } 8 } 9 10 public class Student 11 { 12 public int Id { get; set; } 13 14 public string Name { get; set; } 15 16 public ICollection<Teacher> Teachers { get; set; } 17 }
(2)映射
1 // TeacherMap 2 using System.ComponentModel.DataAnnotations.Schema; 3 using System.Data.Entity.ModelConfiguration; 4 5 namespace EntFra01 6 { 7 public class TeacherMap : EntityTypeConfiguration<Teacher> 8 { 9 public TeacherMap() 10 { 11 this.ToTable("Teacher"); 12 13 this.HasKey(p => p.Id); 14 15 this.Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 16 this.Property(p => p.Name).IsRequired().HasMaxLength(63); 17 18 this.HasMany(t => t.Students) 19 .WithMany(s => s.Teachers) 20 .Map(m => 21 { 22 m.ToTable("TeacherStudentMap"); 23 m.MapLeftKey("TeacherId"); 24 m.MapRightKey("StudentId"); 25 }); 26 } 27 } 28 } 29 30 // StudentMap 31 using System.ComponentModel.DataAnnotations.Schema; 32 using System.Data.Entity.ModelConfiguration; 33 34 namespace EntFra01 35 { 36 public class StudentMap : EntityTypeConfiguration<Student> 37 { 38 public StudentMap() 39 { 40 this.ToTable("Student"); 41 42 this.HasKey(p => p.Id); 43 44 this.Property(p => p.Id).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 45 this.Property(p => p.Name).IsRequired().HasMaxLength(63); 46 } 47 } 48 } 49 50 51 // DbContext 52 using System.Data.Entity; 53 54 namespace EntFra01 55 { 56 public class EntFraContext : DbContext 57 { 58 public IDbSet<Teacher> TeacherSet { get; set; } 59 60 public IDbSet<Student> StudentSet { get; set; } 61 62 protected override void OnModelCreating(DbModelBuilder modelBuilder) 63 { 64 modelBuilder.Configurations.Add(new TeacherMap()); 65 modelBuilder.Configurations.Add(new StudentMap()); 66 67 base.OnModelCreating(modelBuilder); 68 } 69 } 70 }
(3)生成效果