原文連接:https://www.entityframeworktutorial.net/entityframework6/custom-conventions-codefirst.aspxhtml
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 。