EntityFramework Code-First 簡易教程(十)-------多對多


配置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表中這兩列即是主鍵又是外鍵)。

one-to-one relationship in code first

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既是主鍵又是外鍵。

one-to-one relationship in code first

 

 

到此,一對一,一對多,多對多的關系我們就講完了,基本上能應對大多數情況的開發了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM