PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Npgsql 4.0 Parametri e valori nulli

La nuova API di parametro generico ha effettivamente un problema:dovrebbe accettare il normale null .NET (e non DBNull.Value ), ho aperto questo numero per tenerne traccia, verrà corretto in 4.0.3.

Si noti che come la nota sulla documentazione dice, il punto centrale dell'API generica è evitare di usare il Value proprietà, che è di tipo object . Se si utilizza il generico NpgsqlParameter<int> ma assegna Value , il tuo int verrà inscatolato, vanificando lo scopo dell'API. Dovresti assegnare a TypedValue , che è di tipo int e non box. Questo è anche il motivo per cui non puoi assegnare DBNull.Value per indicare un valore nullo (è un tipo .NET diverso).

Alcune note sull'opportunità di utilizzare questa nuova API generica:

  • Se stai scrivendo molti tipi di valore (ad es. int , DateTime ...) questo rimuoverà tutte le allocazioni di boxe. Se questo sarà significativo dipende dalla tua applicazione:profila attentamente.
  • Le API generiche in generale dovrebbero essere sempre preferite a quelle non generiche quando il tipo è noto in fase di compilazione. Ciò consente al compilatore di verificare la correttezza del tipo in anticipo e rende il codice più chiaro:utilizziamo List<string> anziché ArrayList per una buona codifica anche quando le prestazioni non sono un problema
  • Il principale (unico?) svantaggio dell'API generica è che è specifico per Npgsql, rendendo il tuo codice non portabile ad altri driver di database (sebbene esiste un problema per aver reso questo (o qualcosa di simile) parte di ADO.NET).