4.翻譯系列:EF 6 Code-First默認約定(EF 6 Code-First系列)

原文地址:http://www.entityframeworktutorial.net/code-first/code-first-conventions.aspxhtml

 

EF 6 Code-First系列文章目錄:數據庫

 

 

約定就是一系列的默認規則,經過這些規則,在使用EF Code-First的時候,能夠自動的基於你的領域類配置概念模型。就像你在前面Code-First示例一節中看到的那樣,EF API 基於領域類,不須要額外的配置就能夠,配置主鍵,外鍵,關係,以及列的數據類型等等。這就是EF Code-First約定在起的做用。若是領域類遵循了默認的約定,那麼生成的數據庫結構,就會是基於這個默認約定的。EF 6.x Code -First默認約定都定義在System.Data.Entity.ModelConfiguration.Conventions命名空間下。app

下面的圖表,列出來了Code-First默認約定:學習

默認約定 描述
Schema【模式】 默認狀況下,EF會爲全部的數據庫對象,建立dbo模式名稱。
Table Name【數據表名稱】 默認,EF將會建立爲實體建立的表名稱是,實體名稱+s。例如:Student實體將會映射成Students表
Primary Key Name【主鍵名稱】

1.Id測試

2.實體名稱+"Id"(不區分大小寫的)ui

默認狀況下,EF將會把實體的Id屬性設置爲主鍵,或者是將實體名稱+Id的屬性設置爲主鍵。【不區分大小寫的】spa

Foreign Key Property Name【外鍵名稱】

默認狀況下,EF將查找與主體實體的主鍵名稱相同的外鍵屬性.net

若是這個外鍵屬性不存在,那麼EF將會在數據表中,建立一個外鍵列,名稱是:依賴項的導航屬性名稱+「_」+主體實體的主鍵名稱。翻譯

例如:若是在Student實體中,不包含Grade實體的外鍵屬性,EF將會在Students表中,建立名稱爲Grade_GradeId的外鍵。code

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

 

下面的圖形,列出來了,根據默認的約定,生成的數據庫。

 

Relationship Convention【關係約定】

EF 6 默承認以經過導航屬性,推斷出一對多【One-to-Many】的關係。後面的章節中,咱們會學習一對多的關係。

注意的是:EF 6 不包含一對一和多對多的關係約定。你能夠經過數據註解或者Fluent API來配置一對一關係或者多對多關係。

Complex Type Convention【複雜類型約定】

Code First爲類建立的複雜類型,並不包含Key 屬性,一樣主鍵也是沒有經過數據註解或者Fluent API配置的。

好了,這就是Code-First默認約定的大致內容了,注意:這些約定能夠經過數據註解或者Fluent API 重寫。

這一篇就介紹完了,你們有什麼不明白的,能夠在下面留言,我會一一回復。謝謝。

相關文章
相關標籤/搜索