Mengganti nama entitas akan jatuh dan membuat tabel alih-alih mengganti namanya saja.
Ini adalah batasan yang melekat pada EF, bukan Pomelo secara langsung. EF biasanya tidak dapat membedakan antara drop/create tabel, dan rename.
Trik untuk mengetahui bahwa itu adalah penggantian nama adalah dengan mengatur nama tabel secara manual, baik melalui atribut pada kelas entitas, atau melalui API lancar OnModelCreating.
Urutannya seperti:
Misal builder.Entity<OriginalEntity>().ToTable("RenamedEntity");
Menghasilkan migrasi. Ini akan membuat migrasi tabel ganti nama yang benar untuk entitas.
Pastikan migrasi ini benar. Jika Anda menggunakan Pomelo 2.2.6, periksa entri migrationBuilder.DropPrimaryKey
dan AddPrimaryKey
dan hapus entri tersebut, karena ini tidak diperlukan untuk MySQL dan akan menyebabkan masalah dalam menghasilkan skrip SQL idempoten. Ini diperbaiki dalam 3.1.
Ganti nama kelas entitas yang sebenarnya.
Buat migrasi lain untuk memperbarui snapshot model dengan nama entitas baru.
Jika Anda kemudian ingin menghapus .ToTable("RenamedEntity");
untuk kembali ke penamaan tabel berbasis konvensi:
Hapus .ToTable("RenamedEntity");
. Jika Anda mendapatkan nama tabel yang benar, nama berbasis konvensi harus sama dengan nama saat ini.
Buat migrasi terakhir untuk memverifikasi bahwa tabel tidak diganti namanya lagi. Jika ya, kembalikan semua langkah, perbaiki namanya, dan ulangi. Jika migrasi kosong, Anda dapat mengembalikannya.
Saya belum mengujinya, tetapi Anda mungkin dapat melakukan ini dalam urutan terbalik. YAITU:
.ToTable
dengan nama tabel saat ini.ToTable
Untuk informasi lebih lanjut, lihat pertanyaan stack overflow ini:
https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns
Pada dasarnya, ada heuristik yang diterapkan, yang dapat mendeteksi perubahan nama tabel dalam kasus _some_.
Tetapi mengganti nama adalah salah satu operasi tersebut, di mana Anda pasti ingin memeriksa kode migrasi yang dihasilkan setelahnya dan mengubah panggilan DropTable
dan CreateTable
menjadi RenameTable
jika perlu.
EF Core telah mengubah nama tabel seperti migrasi yang dibuat secara otomatis ini.
migrationBuilder.DropPrimaryKey(
name: "PK_LogFieldsConfiguration",
table: "LogFieldsConfiguration");
migrationBuilder.RenameTable(
name: "LogFieldsConfiguration",
newName: "LogFieldsConfigurations");
migrationBuilder.AddPrimaryKey(
name: "PK_LogFieldsConfigurations",
table: "LogFieldsConfigurations",
column: "Id");
Komentar yang paling membantu
Ini adalah batasan yang melekat pada EF, bukan Pomelo secara langsung. EF biasanya tidak dapat membedakan antara drop/create tabel, dan rename.
Trik untuk mengetahui bahwa itu adalah penggantian nama adalah dengan mengatur nama tabel secara manual, baik melalui atribut pada kelas entitas, atau melalui API lancar OnModelCreating.
Urutannya seperti:
Misal
builder.Entity<OriginalEntity>().ToTable("RenamedEntity");
Menghasilkan migrasi. Ini akan membuat migrasi tabel ganti nama yang benar untuk entitas.
Pastikan migrasi ini benar. Jika Anda menggunakan Pomelo 2.2.6, periksa entri
migrationBuilder.DropPrimaryKey
danAddPrimaryKey
dan hapus entri tersebut, karena ini tidak diperlukan untuk MySQL dan akan menyebabkan masalah dalam menghasilkan skrip SQL idempoten. Ini diperbaiki dalam 3.1.Ganti nama kelas entitas yang sebenarnya.
Buat migrasi lain untuk memperbarui snapshot model dengan nama entitas baru.
Jika Anda kemudian ingin menghapus
.ToTable("RenamedEntity");
untuk kembali ke penamaan tabel berbasis konvensi:Hapus
.ToTable("RenamedEntity");
. Jika Anda mendapatkan nama tabel yang benar, nama berbasis konvensi harus sama dengan nama saat ini.Buat migrasi terakhir untuk memverifikasi bahwa tabel tidak diganti namanya lagi. Jika ya, kembalikan semua langkah, perbaiki namanya, dan ulangi. Jika migrasi kosong, Anda dapat mengembalikannya.
Saya belum mengujinya, tetapi Anda mungkin dapat melakukan ini dalam urutan terbalik. YAITU:
.ToTable
dengan nama tabel saat ini.ToTable
Untuk informasi lebih lanjut, lihat pertanyaan stack overflow ini:
https://stackoverflow.com/questions/13296996/entity-framework-migrations-renaming-tables-and-columns