EF Code First中的主外鍵約定
原文地址:http://www.entityframeworktutorial.net/code-first/code-first-conventions.aspx
EF教程:https://www.entityframeworktutorial.net/code-first/code-first-conventions.aspx
約定就是一系列的默認規則,通過這些規則,在使用EF Code-First的時候,可以自動的基於你的領域類配置概念模型。就像你在前面Code-First示例一節中看到的那樣,EF API 基於領域類,不需要額外的配置就可以,配置主鍵,外鍵,關系,以及列的數據類型等等。這就是EF Code-First約定在起的作用。如果領域類遵循了默認的約定,那么生成的數據庫結構,就會是基於這個默認約定的。EF 6.x Code -First默認約定都定義在System.Data.Entity.ModelConfiguration.Conventions命名空間下。
下面的圖表,列出來了Code-First默認約定:
默認約定 |
描述 |
Schema【模式】 |
默認情況下,EF會為所有的數據庫對象,創建dbo模式名稱。 |
Table Name【數據表名稱】 |
默認,EF將會創建為實體創建的表名稱是,實體名稱+s。例如:Student實體將會映射成Students表 |
Primary Key Name【主鍵名稱】 |
1.Id 2.實體名稱+"Id"(不區分大小寫的) 默認情況下,EF將會把實體的Id屬性設置為主鍵,或者是將實體名稱+Id的屬性設置為主鍵。【不區分大小寫的】 |
Foreign Key Property Name【外鍵名稱】 |
默認情況下,EF將查找與主體實體的主鍵名稱相同的外鍵屬性。 如果這個外鍵屬性不存在,那么EF將會在數據表中,創建一個外鍵列,名稱是:依賴項的導航屬性名稱+“_”+主體實體的主鍵名稱。 例如:如果在Student實體中,不包含Grade實體的外鍵屬性,EF將會在Students表中,創建名稱為Grade_GradeId的外鍵。 |
NULL column 【NULL的列】 |
EF將會為所有的引用類型的屬性創建可空數據列。例如:string,NUllable<int>,Student,Grade(所有類類型的屬性) |
Not null column【不為空的列】 |
EF中為主鍵屬性以及不為空類型的值類型創建非空列。例如:int、float、decimal、datetime等等。 |
DB Column Order【數據庫列的順序】 |
EF會根據屬性在實體中的順序,為列創建相應的順序。需要注意的是:主鍵列會被移到第一個 |
Properties mapping to DB【屬性怎么映射到數據庫】 |
默認情況下,所有的實體屬性都會被映射到數據庫中,可以使用【NotMapped】特性,來標識屬性,就可以讓這個屬性不被映射到數據庫的表中了。 |
Cascade delete【級聯刪除】 |
默認對所有類型的關系都是啟用的。 |
下面的圖表,列出來了C#數據類型和SQL Server數據類型映射的對應關系。
C#數據類型 |
映射到的SQL Server數據類型 |
int |
int |
string |
nvarchar(max) |
decimal |
decimal(18,2) |
float |
real |
byte[] |
varbinary(max) |
datetime |
datetime |
bool |
bit |
byte |
tinyint |
short |
smallint |
long |
bigint |
double |
float |
char |
no mapping |
sbyte |
no mapping(Throws exception)拋異常 |
object |
no mapping |
下面的圖形,列出來了,根據默認的約定,生成的數據庫。