19.翻譯系列:EF 6中定義自定義的約定【EF 6 Code-First約定】

原文連接: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 。

相關文章
相關標籤/搜索