这里有两个类,Student和Course,一个Student能够有多个Course,一个Course也能够有多个Student,因此这就成了多对多关系。更多信息请访问Entity Relationship。数据库
进入正题:ide
Student类中有一个Course的集合属性,在Course类中也有一个Student的集合属性,这样就默认配置成了多对多关系。代码以下:ui
public class Student { public Student() { } public int StudentId { get; set; } [Required] public string StudentName { get; set; } public int StdandardId { get; set; } public virtual ICollection<Course> Courses { get; set; } } public class Course { public Course() { this.Students = new HashSet<Student>(); } public int CourseId { get; set; } public string CourseName { get; set; } public virtual ICollection<Student> Students { get; set; } }
上面的代码将会建立以下的数据库,这里会新建一张表CourseStudents,这张新表里面记录着对多对关系的两个表的外键StudentId和CourseId(固然在CourseStudents表中这两列便是主键又是外键)。this
直接上配置代码:spa
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Student>() .HasMany<Course>(s => s.Courses) .WithMany(c => c.Students) .Map(cs => { cs.MapLeftKey("StudentRefId"); cs.MapRightKey("CourseRefId"); cs.ToTable("StudentCourse"); }); }
如你所见,上面的例子中, .HasMany<Course>(s => s.Courses).WithMany(c => c.Students)
告诉Student和Course有多对多关系。.net
Map方法能够传入一个委托,因此这里能够使用lambda表达式,其中,MapLeftKey方法指定了Student的外键属性名称(这里先指定Student,因此它是左表)和Course表的外键,ToTable方法将建立StudentCourse表。code
这样数据库将会建立一个新表StudentCourse,CourseRefId和StudentRefId既是主键又是外键。blog
到此,一对一,一对多,多对多的关系咱们就讲完了,基本上能应对大多数状况的开发了。ip