Il problema che sto affrontando riguarda le query SQL in pgAdmin 4.
Entity Framework (inclusa la sua edizione Core) capitalizza i nomi di tabelle e colonne.
Il che significa che il tuo SQL avrà quindi qualcosa di simile
select e."Id", e."Text" from "Entries" e
where e."Text" like '%implicated%'
Stavo cercando su google come evitare che Entity Framework capitalizzi i nomi ma non ne abbia scoperto molto.
Esiste una soluzione alternativa per evitare che i nomi di tabella e colonna vengano racchiusi tra virgolette?
Grazie in anticipo!
Facile!
Vai al metodo OnModelCreating
.
Hai bisogno di un metodo di estensione (il codice è condiviso sotto)
modelBuilder.NamesToSnakeCase();
Crea una classe ModelBuilderExtensions
e incolla quanto segue:
public static void NamesToSnakeCase(this ModelBuilder modelBuilder)
{
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
// Replace table names
entity.Relational().TableName = entity.Relational().TableName.ToSnakeCase();
// Replace column names
foreach (var property in entity.GetProperties())
{
property.Relational().ColumnName = property.Name.ToSnakeCase();
}
foreach (var key in entity.GetKeys())
{
key.Relational().Name = key.Relational().Name.ToSnakeCase();
}
foreach (var key in entity.GetForeignKeys())
{
key.Relational().Name = key.Relational().Name.ToSnakeCase();
}
foreach (var index in entity.GetIndexes())
{
index.Relational().Name = index.Relational().Name.ToSnakeCase();
}
}
}
Puoi vedere il metodo di estensione ToSnakeCase
- qui è nella classe StringExtensions
:
public static string ToSnakeCase(this 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();
}
Rimuovere il db, ricreare le migrazioni, quindi eseguire l' dotnet ef database update
- bingo!