2017-09-26 8 views
1

Je suis en train de déplacer un projet qui utilisait EF 6 à EF de base 2.EF Core 2.0 migrations conventions de nommage

Les migrations dans l'ancien projet a produit une base de données avec un "dbo". préfixe sur tout, par ex. les tables sont "dbo.Something", les clés étrangères sont "FK_dbo.Something_dbo.SomethingElse_Id". Mais EF Core ne suit pas cette convention, il omet le "dbo.".

Existe-t-il un moyen de faire en sorte que EF Core suive l'ancienne convention pour que mes bases de données existantes fonctionnent toujours?

Répondre

0

Vous pouvez modifier la convention de dénomination en utilisant la méthode OnModelCreating du DbContext. Voici un exemple pour un 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"; 
      } 
     } 
    } 
}