本文翻译自《Entity Framework Core: Naming Convention》,由于水平有限,故无法保证翻译完全正确,欢迎指出错误。谢谢!
注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final)。正式版发布时,功能可能存在变动。
Entity Framework 迁移允许从模型生成数据库,这意味着必须从类名和属性名生成数据库对象的名称。对于大多数人来说使用默认名称是没有问题的,但是,您的DBA可能会要求您使用特定的命名约定。例如,一些DBA希望表名大写,或者列名使用表名为前缀。
Entity Framework 允许逐个设置表名或列名:
protected override void OnModelCreating(ModelBuilder modelBuilder){ modelBuilder.Entity<Blog>().ForSqlServerToTable("Blog"); }
但是,写这些代码非常无聊并且容易出错,不应该逐个设置对像的名称,您可以通过修改模型实现全局设置。事实上modelBuilder
是可读写的,您可以迭代所有对象并更改其名称。
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