1

實體框架6代碼首先,是否有一種方法(可能通過Data Annotations或Fluent API),以便Migrations生成的數據庫具有小寫字母列名稱,即使我的模型類有Pascal外殼屬性?EF代碼首先從Pascal Case屬性遷移到小寫字段

I.e.這個類:

public class Person 
    { 
     public int PersonId { get; set; } 
     public string FirstName { get; set; } 
     public string Surname { get; set; } 
} 

應該映射到這個表(即遷移應該生成此表):

person 
    person 
    firstname 
    surname 

,甚至這樣的事情將是很好:

person 
    person_id 
    first_name 
    surname 

附:我正與一個MySQL數據庫的工作...感謝

+1

我有同樣的問題。我使用的是區分大小寫的PostgreSQL,我也想要小寫的表和列名。你找到解決方案嗎? –

回答

0

我使用一些代碼在OnModelCreating的方法來重命名所有改編自這裏的表,列和鍵等

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    // SET LOWERCASE NAMES 
    foreach (var entity in builder.Model.GetEntityTypes()) 
    { 
     // Replace table names 
     entity.Relational().TableName = ToSnakeCase(entity.Relational().TableName); 

     // Replace column names    
     foreach (var property in entity.GetProperties()) 
     { 
      property.Relational().ColumnName = ToSnakeCase(property.Name); 
     } 

     foreach (var key in entity.GetKeys()) 
     { 
      key.Relational().Name = ToSnakeCase(key.Relational().Name); 
     } 

     foreach (var key in entity.GetForeignKeys()) 
     { 
      key.Relational().Name = ToSnakeCase(key.Relational().Name); 
     } 

     foreach (var index in entity.GetIndexes()) 
     { 
      index.Relational().Name = ToSnakeCase(index.Relational().Name); 
     } 
    } 
} 

private string ToSnakeCase(string input) 
{ 
    if (string.IsNullOrEmpty(input)) { return input; } 

    var startUnderscores = Regex.Match(input, @"^_+"); 
    return startUnderscores + Regex.Replace(input, @"([a-z0-9])([A-Z])", "$1_$2").ToLower(); 
} 

代碼:

https://andrewlock.net/customising-asp-net-core-identity-ef-core-naming-conventions-for-postgresql/