原文連接:https://www.entityframeworktutorial.net/entityframework6/custom-conventions-codefirst.aspxhtml
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系列】
在前面的章節中,你以及學習了Code-First默認的約定。EF 6一樣也讓你本身定義自定義的約定,而後你的實體就會遵循這個自定義的約定的行爲。app
這裏有兩種類型的約定:配置約定(Configuration Conventions)和模型約定(Model Conventions).ide
配置約定學習
配置約定就是不重寫Fluent API提供實體的默認的行爲,給實體進行配置。你能夠在OnModelCreating方法中定義配置約定,還能夠像Fluent API配置普通的實體映射那樣,在自定義的類中配置約定。測試
例如,若是你想要給屬性名稱爲{實體名稱}_ID的屬性,配置主鍵,能夠像下面這樣:ui
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder .Properties() .Where(p => p.Name == p.DeclaringType.Name + "_ID") .Configure(p => p.IsKey()); base.OnModelCreating(modelBuilder); }
一樣你能夠定義數據類型的大小的約定【data type of size】spa
下面的代碼,爲string類型的屬性定義了一個約定。它將會建立nvarchar類型的列,大小是50。.net
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder .Properties() .Where(p => p.PropertyType.Name == "String") .Configure(p => p.HasMaxLength(50)); base.OnModelCreating(modelBuilder); }
固然,你能夠在單獨的類中,定義這些約定,這個自定義的類須要繼承自Convention類,例如:翻譯
public class PKConvention : Convention { public PKConvention() { .Properties() .Where(p => p.Name == p.DeclaringType.Name + "_ID") .Configure(p => p.IsKey()); } }
添加完自定義的類,而後在OnModelCreating方法中這樣用:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Add<PKConvention>(); }
模型約定
模型約定是基於模型元數據的。這裏有關於CSDL和SSDL的約定,建立一個類,實現CSDL約定中的IConceptualModelConvention 接口,或者實現SSDL約定中的IStoreModelConvention
接口。
想要了解更多EF 6 自定義約定相關的,能夠看看這篇文章: Custom Convention in EF 6 。