API parameter generik baru memang memiliki masalah - seharusnya menerima .NET null
. reguler (dan bukan DBNull.Value
), saya telah membuka masalah ini
untuk melacak ini, itu akan diperbaiki di 4.0.3.
Perhatikan bahwa sebagai catatan dokumentasi
mengatakan, inti dari API generik adalah untuk menghindari penggunaan Value
properti, yang bertipe object
. Jika Anda menggunakan NpgsqlParameter<int>
generik tetapi tetapkan Value
, int Anda akan dikotak, mengalahkan tujuan API. Anda harus menetapkan ke TypedValue
, yang bertipe int
dan tidak akan kotak. Ini juga mengapa Anda tidak dapat menetapkan DBNull.Value
untuk menunjukkan nilai nol (ini adalah tipe .NET yang berbeda).
Beberapa catatan tentang apakah API generik baru ini harus digunakan:
- Jika Anda menulis banyak jenis nilai (mis.
int
,DateTime
...) ini akan menghapus semua alokasi tinju. Apakah ini akan menjadi signifikan tergantung pada aplikasi Anda - profil dengan hati-hati. - API Generik secara umum harus selalu lebih disukai daripada yang non-generik ketika jenisnya diketahui pada waktu kompilasi. Ini memungkinkan kompiler untuk memeriksa kebenaran jenis lebih awal dan membuat kode Anda lebih jelas - kami menggunakan
List<string>
daripadaArrayList
sebagai masalah pengkodean yang baik bahkan ketika kinerja tidak menjadi masalah - Kelemahan utama (hanya?) dari API generik adalah spesifik untuk Npgsql, membuat kode Anda tidak dapat dibawa-bawa ke driver database lain (walaupun ada masalah untuk membuat ini (atau yang serupa) bagian dari ADO.NET).