A renomeação da entidade eliminará e criará a tabela em vez de renomeá-la apenas.
Esta é uma limitação inerente da EF, não diretamente do Pomelo. EF normalmente não pode distinguir entre uma queda / criação de tabela e uma renomeação.
O truque para dizer que é uma renomeação é definir o nome da tabela manualmente, por meio de um atributo na classe de entidade ou por meio da API fluente OnModelCreating.
A sequência é assim:
Por exemplo, builder.Entity<OriginalEntity>().ToTable("RenamedEntity");
Gere uma migração. Isso criará a migração de tabela de renomeação correta para a entidade.
Verifique se esta migração está correta. Se você estiver usando o Pomelo 2.2.6, verifique as entradas migrationBuilder.DropPrimaryKey
e AddPrimaryKey
e exclua-as, uma vez que elas não são necessárias para o MySQL e causarão problemas com a geração de scripts SQL idempotentes. Isso foi corrigido em 3.1.
Renomeie a classe de entidade real.
Gere outra migração para atualizar o instantâneo do modelo com os novos nomes de entidade.
Se você quiser remover .ToTable("RenamedEntity");
para voltar à nomenclatura de tabela baseada em convenção:
Remova o .ToTable("RenamedEntity");
. Se você obteve o nome da tabela correto, o nome baseado na convenção deve ser igual ao nome atual.
Gere uma migração final para verificar se a tabela não foi renomeada novamente. Se foi, reverta todas as etapas, corrija o nome e refaça. Se a migração estava vazia, você pode revertê-la.
Ainda estou para testar, mas você provavelmente pode fazer isso na ordem inversa para. IE:
.ToTable
com o nome da tabela atual.ToTable
Para obter mais informações, consulte esta questão sobre estouro de pilha:
https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns
Basicamente, existem heurísticas implementadas, que podem detectar a renomeação de uma tabela em _alguns_ casos.
Mas renomear é uma daquelas operações, onde você definitivamente deseja verificar o código de migração gerado posteriormente e alterar as chamadas DropTable
e CreateTable
para RenameTable
quando necessário.
EF Core mudou o nome da tabela, assim como essas migrações geradas automaticamente.
migrationBuilder.DropPrimaryKey(
name: "PK_LogFieldsConfiguration",
table: "LogFieldsConfiguration");
migrationBuilder.RenameTable(
name: "LogFieldsConfiguration",
newName: "LogFieldsConfigurations");
migrationBuilder.AddPrimaryKey(
name: "PK_LogFieldsConfigurations",
table: "LogFieldsConfigurations",
column: "Id");
Comentários muito úteis
Esta é uma limitação inerente da EF, não diretamente do Pomelo. EF normalmente não pode distinguir entre uma queda / criação de tabela e uma renomeação.
O truque para dizer que é uma renomeação é definir o nome da tabela manualmente, por meio de um atributo na classe de entidade ou por meio da API fluente OnModelCreating.
A sequência é assim:
Por exemplo,
builder.Entity<OriginalEntity>().ToTable("RenamedEntity");
Gere uma migração. Isso criará a migração de tabela de renomeação correta para a entidade.
Verifique se esta migração está correta. Se você estiver usando o Pomelo 2.2.6, verifique as entradas
migrationBuilder.DropPrimaryKey
eAddPrimaryKey
e exclua-as, uma vez que elas não são necessárias para o MySQL e causarão problemas com a geração de scripts SQL idempotentes. Isso foi corrigido em 3.1.Renomeie a classe de entidade real.
Gere outra migração para atualizar o instantâneo do modelo com os novos nomes de entidade.
Se você quiser remover
.ToTable("RenamedEntity");
para voltar à nomenclatura de tabela baseada em convenção:Remova o
.ToTable("RenamedEntity");
. Se você obteve o nome da tabela correto, o nome baseado na convenção deve ser igual ao nome atual.Gere uma migração final para verificar se a tabela não foi renomeada novamente. Se foi, reverta todas as etapas, corrija o nome e refaça. Se a migração estava vazia, você pode revertê-la.
Ainda estou para testar, mas você provavelmente pode fazer isso na ordem inversa para. IE:
.ToTable
com o nome da tabela atual.ToTable
Para obter mais informações, consulte esta questão sobre estouro de pilha:
https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns