Rangka Kerja Entiti (EF) direka bentuk untuk menjamakan nama jadual secara automatik berdasarkan konvensyen bahawa nama kelas model mewakili entiti tunggal. Walau bagaimanapun, dalam sesetengah kes, anda mungkin menghadapi percanggahan apabila EF mencipta nama jadual jamak manakala model atau paparan mengharapkan nama tunggal.
Masalah:
Yang disediakan kod mentakrifkan model bernama Vote dan mengharapkan jadual bernama "vote" dalam MySQL. Walau bagaimanapun, EF mencipta jadual bernama "undi" sebaliknya. Apabila cuba mengakses jadual daripada paparan, pengecualian berlaku yang menunjukkan bahawa jadual "undi" tidak wujud.
Punca Kemungkinan:
Penyambung MySQL .NET mungkin tidak menyokong sepenuhnya konvensyen pemajmukan nama jadual EF.
Penyelesaian:
Untuk menyelesaikan isu ini, anda boleh menyesuaikan tingkah laku pemajmukan nama jadual dalam EF. Berikut adalah langkah-langkahnya:
1. Sesuaikan Kaedah OnModelCreating:
Dalam kelas DbContext, ganti kaedah OnModelCreating dan lumpuhkan PluralizingTableNameConvention.
<code class="csharp">protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); }</code>
2. Alih Keluar Penciptaan Pangkalan Data Permulaan:
Pemula Rangka Kerja Entiti boleh digunakan untuk mencipta dan memulakan pangkalan data. Walau bagaimanapun, Penyambung .NET MySQL mungkin tidak membenarkan EF mencipta pangkalan data. Untuk mengelakkan isu ini, pastikan pangkalan data wujud sebelum EF cuba menciptanya.
<code class="csharp">// Remove database creation initializer // Database.SetInitializer(new DropCreateDatabaseAlways<myDB>());</code>
3. Hentikan Invokasi Penciptaan Model Asas:
Pastikan pelaksanaan asas OnModelCreating tidak digunakan, kerana ia mungkin mengatasi penyesuaian anda dan mendayakan semula pemajmukan nama jadual.
<code class="csharp">// Don't call the base implementation // base.OnModelCreating(modelBuilder);</code>
4. Cipta Pangkalan Data jika Tidak Wujud:
Buat pangkalan data secara manual jika ia tidak wujud. Ini memastikan bahawa EF boleh menggunakan nama jadual yang betul tanpa menemui pengecualian jadual yang hilang.
Petua Tambahan:
Dengan mengikuti langkah ini, anda seharusnya dapat menyelesaikan pemajmukan nama jadual isu percanggahan dan berjaya mengakses jadual "undi" dari pandangan anda.
Atas ialah kandungan terperinci Mengapa Rangka Kerja Entiti Menggandakan Nama Jadual dalam MySQL Apabila Model Saya Menjangkakan Nama Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!