Den nya generiska parametern API har verkligen ett problem - den borde acceptera vanlig .NET null
(och inte DBNull.Value
), jag har öppnat det här problemet
för att spåra detta kommer det att fixas i 4.0.3.
Observera att som dokumentationsnoteringen
säger, hela poängen med det generiska API:et är att undvika att använda Value
egenskap, som är av typen object
. Om du använder den generiska NpgsqlParameter<int>
men tilldela Value
, kommer din int att vara boxad, vilket motverkar syftet med API. Du bör tilldela TypedValue
, som är av typen int
och kommer inte att boxas. Det är också därför du inte kan tilldela DBNull.Value
för att ange ett nollvärde (det är en annan .NET-typ).
Några anmärkningar om huruvida detta nya generiska API bör användas:
- Om du skriver många värdetyper (t.ex.
int
,DateTime
...) detta tar bort alla boxningstilldelningar. Huruvida detta kommer att ha betydelse beror på din ansökan – profilera noggrant. - Generiska API:er i allmänhet bör alltid föredras framför icke-generiska när typen är känd vid kompilering. Detta gör att kompilatorn kan kontrollera typkorrektheten tidigt och gör din kod tydligare - vi använder
List<string>
snarare änArrayList
som en fråga om bra kodning även när prestanda inte är ett problem - Den största (enda?) nackdelen med det generiska API:t är att det är Npgsql-specifikt, vilket gör din kod icke-portabel till andra databasdrivrutiner (även om ett problem finns för att göra detta (eller något liknande) till en del av ADO.NET).