本文翻譯自《Entity Framework Core: Naming Convention》,由于水平有限,故無(wú)法保證翻譯完全正確,歡迎指出錯(cuò)誤。謝謝!
注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版發(fā)布時(shí),功能可能存在變動(dòng)。
Entity Framework 遷移允許從模型生成數(shù)據(jù)庫(kù),這意味著必須從類名和屬性名生成數(shù)據(jù)庫(kù)對(duì)象的名稱。對(duì)于大多數(shù)人來(lái)說(shuō)使用默認(rèn)名稱是沒(méi)有問(wèn)題的,但是,您的DBA可能會(huì)要求您使用特定的命名約定。例如,一些DBA希望表名大寫(xiě),或者列名使用表名為前綴。
Entity Framework 允許逐個(gè)設(shè)置表名或列名:
protected override void OnModelCreating(ModelBuilder modelBuilder){ modelBuilder.Entity<Blog>().ForSqlServerToTable("Blog"); }
但是,寫(xiě)這些代碼非常無(wú)聊并且容易出錯(cuò),不應(yīng)該逐個(gè)設(shè)置對(duì)像的名稱,您可以通過(guò)修改模型實(shí)現(xiàn)全局設(shè)置。事實(shí)上modelBuilder
是可讀寫(xiě)的,您可以迭代所有對(duì)象并更改其名稱。
public class BloggingContext : DbContext{ public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // Singularize table name // Blogs => Blog foreach (var entityType in modelBuilder.Model.GetEntityTypes()) { // Add NuGet package&n