配置Many-to-Many(多對多)關系:
這里有兩個類,Student和Course,一個Student可以有多個Course,一個Course也可以有多個Student,所以這就成了多對多關系。更多信息請訪問Entity Relationship。
進入正題:
1.使用DataAnnotation配置多對多關系:
Student類中有一個Course的集合屬性,在Course類中也有一個Student的集合屬性,這樣就默認配置成了多對多關系。代碼如下:
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表中這兩列即是主鍵又是外鍵)。
2.使用Fluent API配置多對多關系:
直接上配置代碼:
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有多對多關系。
Map方法可以傳入一個委托,所以這里可以使用lambda表達式,其中,MapLeftKey方法指定了Student的外鍵屬性名稱(這里先指定Student,所以它是左表)和Course表的外鍵,ToTable方法將創建StudentCourse表。
這樣數據庫將會創建一個新表StudentCourse,CourseRefId和StudentRefId既是主鍵又是外鍵。
到此,一對一,一對多,多對多的關系我們就講完了,基本上能應對大多數情況的開發了。