[Entity Framework][Code First]Default Convention

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來改變這些預設的行為,自行對應到資料庫應該長成什麼樣子。

 

 

 

一天一分享,身體好健康。

該追究的不是過去的原因,而是現在的目的。