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


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

 

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

 

 

約定就是一系列的默認規則,通過這些規則,在使用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

 

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

 

Relationship Convention【關系約定】

EF 6 默認可以通過導航屬性,推斷出一對多【One-to-Many】的關系。后面的章節中,我們會學習一對多的關系。

注意的是:EF 6 不包含一對一和多對多的關系約定。你可以通過數據注解或者Fluent API來配置一對一關系或者多對多關系。

Complex Type Convention【復雜類型約定】

Code First為類創建的復雜類型,並不包含Key 屬性,同樣主鍵也是沒有通過數據注解或者Fluent API配置的。

好了,這就是Code-First默認約定的大體內容了,注意:這些約定可以通過數據注解或者Fluent API 重寫。

這一篇就介紹完了,大家有什么不明白的,可以在下面留言,我會一一回復。謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM