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)生成效果

posted @ 2015-05-17 21:37  lcyan  阅读(184)  评论(0编辑  收藏  举报