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 änArrayListsom 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).