1

В коде Entity Framework 6 Сначала существует способ (возможно, с помощью аннотаций данных или Fluent API), чтобы база данных, сгенерированная Migrations, имела имена столбцов нижнего регистра, хотя мои классы моделей имеют свойства Pascal Casing?Первичные миграции EF-кода из свойств Паскаля в нижние регистры

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 

P.S. Я работаю с базой данных 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/