Mengapa Rangka Kerja Entiti Menggandakan Nama Jadual dalam MySQL Apabila Model Saya Menjangkakan Nama Tunggal?

DDD
Lepaskan: 2024-10-29 09:25:30
asal
353 orang telah melayarinya

Why Does Entity Framework Pluralize Table Names in MySQL When My Model Expects a Singular Name?

Percanggahan Pemajmukan Nama Jadual Rangka Entiti

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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:

  • Gunakan atribut [Jadual] untuk menentukan secara eksplisit nama jadual jika perlu.
  • Pertimbangkan untuk menggunakan pembekal pangkalan data lain yang menyokong sepenuhnya konvensyen nama jadual EF.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan