Pomelo.entityframeworkcore.mysql: Scaffold ServerVersion() panggilan

Dibuat pada 22 Nov 2019  ·  3Komentar  ·  Sumber: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

Saat ini kami tidak membuat perancah ServerVersion yang sedang digunakan oleh server database.

Dengan implementasi yang berbeda dari server database yang kompatibel dengan MySQL di luar sana dan masih banyak pengembangan di sisi fitur MySQL, kami memanfaatkan pernyataan khusus versi server di banyak bagian penyedia Pomelo.

Meskipun pengguna harus selalu menentukan versi server yang diharapkan (atau minimal yang didukung) saat menyiapkan DbContext , banyak pengguna tidak mengetahuinya dan oleh karena itu menggunakan versi server default, yang merupakan versi terbaru.

Seperti yang kita diskusikan pada hari Rabu, scaffolding ServerVersion akan membantu mencegah masalah ini setidaknya dalam kasus-kasus tersebut, di mana pengguna berasumsi bahwa kode scaffolded sudah selesai dan tidak perlu diubah, yang dapat menyebabkan bug di kemudian hari. , ketika Pomelo menggunakan fitur MySQL yang baru diperkenalkan yang belum didukung oleh versi lama dari basis data dasar yang digunakan oleh pengguna.

Ini akan menjadi langkah pertama untuk mewajibkan pengaturan versi server secara eksplisit saat menyiapkan DbContext untuk Pomelo.

Itu harus berfungsi setara dengan PR #932 yang dihapus.

/cc @ajcvickers , @roji

type-enhancement

Semua 3 komentar

Perhatikan bahwa jika Anda ingin layanan tunggal terpengaruh oleh versi (misalnya TypeMappingSource, QuerySqlGenerator), maka kecuali saya salah, anotasi model tidak akan cukup - Anda akan memerlukan sesuatu yang mewarisi ISingletonOptions. Ini akan menyebabkan penyedia layanan baru dibangun untuk yang berbeda, dan contoh berbeda dari setiap layanan tunggal untuk dipakai. Anda dapat melihat bagaimana Npgsql melakukan ini di NpgsqlOptions , yang memperluas ISingletonOptions (atau CosmosSingletonOptions di EF Core). @ajcvickers dapat mengonfirmasi bahwa saya tidak mengatakan sesuatu yang konyol.

IIRC sayangnya kami belum memiliki mekanisme untuk membuat perancah opsi konteks db, yang merupakan cara versi akan diimplementasikan. Tidak ada waktu untuk menemukan masalah pelacakan saat ini, tetapi @bricelam dapat mengonfirmasi.

Saya pikir kami menerapkannya dengan cara yang sama di #961, di mana kami membaca versi server dari koneksi tepat sebelum perancah, dan kemudian menyimpannya sebagai properti IMySqlOptions (melalui ekstensi DbContextBuilder resmi kami metode ServerVersion() ) dan panggil Initialize() selama belum disetel karena alasan tertentu.

Kami kemudian menggunakan ProviderCodeGenerator.GenerateProviderOptions() untuk menghasilkan kode untuk metode ekstensi ServerVersion() .

Jadi kami tidak lagi mengikuti rute anotasi model yang kami coba di PR #932 yang dihapus. Tetapi kami memastikan dengan PR ini, bahwa kami menyediakan fungsionalitas yang sama yang ingin kami berikan dengan #932, tetapi kali ini hanya menggunakan kembali metode ekstensi ServerVersion() sudah ada.

Kita perlu mengalirkan model (atau hanya anotasinya) ke dalam metode scaffolding penyedia. Dilacak oleh https://github.com/aspnet/EntityFrameworkCore/issues/10487

Apakah halaman ini membantu?
0 / 5 - 0 peringkat