2017-09-26 121 views
1

我想那個移動使用EF 6 EF睿2EF核2.0遷移命名約定

的移民在老項目產生了一個數據庫的項目「DBO」。一切的前綴,例如表是「dbo.Something」,外鍵是「FK_dbo.Something_dbo.SomethingElse_Id」。

但EF核心不遵循這個慣例,它留下了「dbo」。

有沒有辦法讓EF Core遵循舊的約定,所以我現有的數據庫將仍然工作?

回答

0

您可以使用DbContextOnModelCreating方法更改命名約定。以下是blog post I wrote的示例:

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 "Humanizer" to use Singularize() 
      entityType.Relational().TableName = entityType.Relational().TableName.Singularize(); 
     } 

     // Prefix column names with table name 
     // Id => Blog_Id 
     foreach (var entityType in modelBuilder.Model.GetEntityTypes()) 
     { 
      foreach (var property in entityType.GetProperties()) 
      { 
       property.Relational().ColumnName = entityType.Relational().TableName + "_" + property.Relational().ColumnName; 
      } 
     } 

     // Rename Foreign Key 
     // FK_Post_Blog_BlogId => FK_Post_Blog_BlogId_Test 
     foreach (var entityType in modelBuilder.Model.GetEntityTypes()) 
     { 
      foreach (var property in entityType.GetProperties()) 
      { 
       foreach (var fk in entityType.FindForeignKeys(property)) 
       { 
        fk.Relational().Name = fk.Relational().Name + "_Test"; 
       } 
      } 
     } 

     // Rename Indices 
     // IX_Blog_Url => IX_Blog_Url_Test 
     foreach (var entityType in modelBuilder.Model.GetEntityTypes()) 
     { 
      foreach (var index in entityType.GetIndexes()) 
      { 
       index.Relational().Name = index.Relational().Name + "_Test"; 
      } 
     } 
    } 
}