原文地址:http://www.entityframeworktutorial.net/code-first/code-first-conventions.aspx
EF 6 Code-First系列文章目錄:
- 1 翻譯系列:什么是Code First(EF 6 Code First 系列)
- 2.翻譯系列:為EF Code-First設置開發環境(EF 6 Code-First系列)
- 3.翻譯系列:EF Code-First 示例(EF 6 Code-First系列)
- 4.翻譯系列:EF 6 Code-First默認約定(EF 6 Code-First系列)
- 5.翻譯系列:EF 6中數據庫的初始化(EF 6 Code-First 系列)
- 6.翻譯系列:EF 6 Code-First中數據庫初始化策略(EF 6 Code-First系列
- 7.翻譯系列:EF 6中的繼承策略(EF 6 Code-First 系列)
- 8.翻譯系列: EF 6中配置領域類(EF 6 Code-First 系列)
- 9.翻譯系列:EF 6以及EF Core中的數據注解特性(EF 6 Code-First系列)
- 9.1 翻譯系列:數據注解特性之----Table【EF 6 Code-First 系列】
- 9.2 翻譯系列:數據注解特性之---Column【EF 6 Code First系列】
- 9.3 翻譯系列:數據注解特性之Key【EF 6 Code-First 系列】
- 9.4 翻譯系列:EF 6以及 EF Core中的NotMapped特性(EF 6 Code-First系列)
- 9.5 翻譯系列:數據注解之ForeignKey特性【EF 6 Code-First系列】
- 9.6 翻譯系列:數據注解之Index特性【EF 6 Code-First系列】
- 9.7 翻譯系列:EF數據注解特性之--InverseProperty【EF 6 Code-First系列】
- 9.8 翻譯系列:數據注解特性之--Required 【EF 6 Code-First系列】
- 9.9 翻譯系列:數據注解特性之--MaxLength 【EF 6 Code-First系列】
- 9.10 翻譯系列:EF數據注解特性之StringLength【EF 6 Code-First系列】
- 9.11 翻譯系列:數據注解特性之--Timestamp【EF 6 Code-First系列】
- 9.12 翻譯系列:數據注解特性之ConcurrencyCheck【EF 6 Code-First系列】
- 10.翻譯系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
- 10.1.翻譯系列:EF 6中的實體映射【EF 6 Code-First系列】
- 10.2.翻譯系列:使用Fluent API進行屬性映射【EF 6 Code-First】
- 11.翻譯系列:在EF 6中配置一對零或者一對一的關系【EF 6 Code-First系列】
- 12.翻譯系列:EF 6 中配置一對多的關系【EF 6 Code-First系列】
- 13.翻譯系列:Code-First方式配置多對多關系【EF 6 Code-First系列】
- 14.翻譯系列:從已經存在的數據庫中生成上下文類和實體類【EF 6 Code-First系列】
- 15.翻譯系列:EF 6中的級聯刪除【EF 6 Code-First 系列】
- 16.翻譯系列:EF 6 Code -First中使用存儲過程【EF 6 Code-First系列】
- 17.翻譯系列:將Fluent API的配置遷移到單獨的類中【EF 6 Code-First系列】
- 18.翻譯系列:EF 6 Code-First 中的Seed Data(種子數據或原始測試數據)【EF 6 Code-First系列】
- 19.翻譯系列:EF 6中定義自定義的約定【EF 6 Code-First約定】
- 20.翻譯系列:Code-First中的數據庫遷移技術【EF 6 Code-First系列】
- 20.1翻譯系列:EF 6中自動數據遷移技術【EF 6 Code-First系列】
- 20.2.翻譯系列:EF 6中基於代碼的數據庫遷移技術【EF 6 Code-First系列】
- 21.翻譯系列:Entity Framework 6 Power Tools【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 重寫。
這一篇就介紹完了,大家有什么不明白的,可以在下面留言,我會一一回復。謝謝。