Jenis "uint" dan "ulong" dalam Rangka Kerja Entiti
Dalam Rangka Kerja Entiti, atribut kelas menggunakan jenis data panjang boleh menjadi Pemetaan adalah betul apabila menambah migrasi baharu (kod-didahulukan), tetapi pembekal EF untuk mysql melangkau jenis data ulong. Bagaimanakah cara saya memetakan harta kepada bigint mysql yang tidak ditandatangani?
Dikemas kini (Februari 2021)
Nampaknya EF Core kini menyokong ulong - lihat jawapan @JimbobTheSailor di bawah.
Versi Rangka Kerja Entiti Lama:
Ternyata Rangka Kerja Entiti tidak menyokong jenis data yang tidak ditandatangani. Untuk lajur uint, nilai boleh disimpan dalam jenis data bertanda yang lebih besar (iaitu panjang). Bagaimana dengan lajur ulong? Penyelesaian generik tidak berfungsi untuk saya kerana ia tidak mempunyai jenis data bertanda yang disokong oleh EF yang cukup besar untuk memegang ulong tanpa melimpah.
Setelah berfikir sejenak, saya menemui penyelesaian mudah untuk masalah ini: simpan sahaja data dalam jenis panjang yang disokong dan tukarkannya kepada ulong apabila diakses. Anda mungkin berfikir: "Tunggu, nilai maksimum ulong > nilai maksimum panjang Anda masih boleh menyimpan bait ulong dalam panjang dan kemudian menukarnya semula kepada ulong apabila diperlukan, kerana kedua-duanya Terdapat 8 bait. Ini akan membolehkan anda menyimpan pembolehubah ulong ke pangkalan data melalui EF.
<code class="csharp">// 避免直接修改以下内容。 // 仅用作数据库列。 public long __MyVariable { get; set; } // 访问/修改此变量。 // 告诉 EF 不要将此字段映射到数据库表 [NotMapped] public ulong MyVariable { get { unchecked { return (ulong)__MyVariable; } } set { unchecked { __MyVariable = (long)value; } } }</code>
Akan menghalang pengecualian limpahan jika penukaran tidak disemak.
Semoga ini membantu.
Atas ialah kandungan terperinci Bagaimana untuk Memetakan Hartanah `ulong` kepada BigInts Tidak Ditandatangani dalam MySQL dengan Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!