資料庫表之間有一對一 一對多 多對多關係。那同樣,CodeFirst也要能分析這些類之間的這些關係。CodeFirst可以自動通過分析類之間的屬性導航屬性 從而得出類之間的關係,自動確定外鍵。一對多一對多是最為常見的一種關係,符合怎樣的規範會被CodeFirst識別為一對多的關係呢? publ...
資料庫表之間有一對一 一對多 多對多關係。那同樣,CodeFirst也要能分析這些類之間的這些關係。 CodeFirst可以自動通過分析類之間的屬性導航屬性 從而得出類之間的關係,自動確定外鍵。
一對多 一對多是最為常見的一種關係,符合怎樣的規範會被CodeFirst識別為一對多的關係呢?
public class Blog { public string ID { get; set; } public string BlogName { get; set; } public string BlogAuthor { get; set; } public virtual List <Post> Posts { get; set ; } //導航屬性 public virtual List <Article> Articles { get; set; } //導航屬性 [ Timestamp] public byte [] version { get; set; } } public class Post { public string ID { get; set; } public string PostName { get; set; } public string Content { get; set; } public virtual Blog BelongBlog { get; set; } //導航屬性 } public class Article { public string ID { get; set; } public string ArticleName { get; set; } public string Content { get; set; } }CodeFirst發現 Blog中有兩個集合導航屬性,Post中也有一個Blog類型的引用屬性,分析出Blog和 Post以及Article之間都存在一對多的關係。

public Person CreatedBy { get; set; } public Person UpdatedBy { get; set; }那同樣在我們的Person類之中,也需要加上兩個屬性,一個屬性指向這個人創建的所有文章,另一個屬性指向之個人更新的所有文章。
public virtual List<Post> PostsWritten { get; set; } public virtual List <Post> PostsUpdated { get; set ; }
[InverseProperty( "CreatedBy")] public virtual List <Post> PostsWritten { get; set ; } [ InverseProperty("UpdatedBy" )] public virtual List <Post> PostsUpdated { get; set ; }要註意 InverseProperty括弧內的名稱是要與另一個類的相關的導航屬性名稱相匹配的,否則會報錯。 這個時候資料庫外鍵就正確了

多對多 如果兩個類之間,各自都有集合導航屬性指向對方,那這兩個類之間的關鍵會被識別為多對多關係。
public class Student { public int StudentID { get; set; } public string Name { get; set; } public List <Course> Courses { get; set ; } } public class Course { public int CourseID { get; set; } public string CourseName { get; set; } public List <Student> Students { get; set ; } }學生可以選擇多門課程,每門課也有很多學生,這樣的多對對關係,codefirst會自動生成第三張表,表裡存放另外兩張表的主鍵作為外鍵存放。

一對一
在一對一和一對多的關係之後,我們回頭再來講一對一的關係。 如果需要將兩個類之間的關係配置為一對一的關係,那麼需要兩個類互相有指向對方的引用屬性
public class Book { public int BookID { get; set; } public string Name { get; set; } public BookCover Cover { get; set; } } public class BookCover { [ Key , ForeignKey ("Coverof" )] public int BookID { get; set; } public byte [] Photo { get; set; } public Book Coverof { get; set; } }並且兩個類的主鍵要是一樣的,而且為了確認其中一個為關係中的依賴主體,必須用ForeignKey指明,也就是上面的BookCover表的BookID既是外鍵也必須是主鍵。否則會報錯。 關係就講到這裡,如果喜歡就 推薦一下吧~ O(∩_∩)O