Default Convention
Entity Framework會根據Domain Class各Properties的型別來推測產生於資料庫對應的型別,其中會有一些預設的規則來做對應。
根據以下Student 和 Course的範例來說明說
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public byte[] Photo { get; set; }
public ICollection<Course> Courses { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string Name { get; set; }
public string Teacher { get; set; }
public bool IsSelected { get; set; }
public Student Student { get; set; }
}
從Domain Classes對應的資料表:
Convention for Table and Column Names
預設Class Name會等於Table Name,Property Name會等於Column Name。 而且Entity Framework 預設會將Class Name複數化當作Table Name。
備註:取消複數化可由參數做設定
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
}
Convention for Keys
Property名稱為 Id 或者 [class name]Id,Code First 會預設對應Primary Keys。 又因為Key值為int型別,所以Code First 會預設將Key值對應為identity columns(識別規格)。
Convention for String Properites
string會預設對應到nullable columns,且是nvarchar(max)
Convention for Byte Array
Student.Photo 型別是byte[],會對應到nullable columns,且是varbinary(max)
Convention for Booleans
Course.IsSelected 型別是bool,會對應到bit (只能存0,1)
Convention for One-to-Many Relationships
Student class底下有 ICollection<Course> Courses,而Course class底下有Student Student,Code First 認得Student與Course是一對多的關係。 從這兩個class可以看到,他們沒有任何Property可知道哪一個是Foreign Key,而Code First建立Foreign Key根據預設pattern [Name of navigation property]_[Primary Key of related class],根據這個pattern,Course會多一個Student_StudentId這個欄位,以及建立FK的索引鍵。
以上為預設Code First對應到資料庫的關係,當然這些預設都是可以設定的,筆者將在下篇初步說明如何用Configuring with Data Annotations和Configuring Code First with the Fluent API來改變這些預設的行為,自行對應到資料庫應該長成什麼樣子。
一天一分享,身體好健康。
該追究的不是過去的原因,而是現在的目的。