A nova API de parâmetros genéricos realmente tem um problema - ela deve aceitar o .NET regular
null
(e não DBNull.Value
), abri este problema
para rastrear isso, ele será corrigido em 4.0.3. Observe que como a nota de documentação diz, o objetivo da API genérica é evitar o uso do
Value
propriedade, que é do tipo object
. Se você usar o genérico NpgsqlParameter<int>
mas atribua Value
, seu int será encaixotado, anulando o propósito da API. Você deve atribuir a TypedValue
, que é do tipo int
e não vai caixa. É também por isso que você não pode atribuir DBNull.Value
para indicar um valor nulo (é um tipo .NET diferente). Algumas notas sobre se esta nova API genérica deve ser usada:
- Se você estiver escrevendo muitos tipos de valor (por exemplo,
int
,DateTime
...) isso removerá todas as alocações de boxe. Se isso será significativo depende da sua inscrição - faça um perfil com cuidado. - As APIs genéricas em geral sempre devem ser preferidas às não genéricas quando o tipo é conhecido em tempo de compilação. Isso permite que o compilador verifique a correção do tipo antecipadamente e torna seu código mais claro - usamos
List<string>
em vez deArrayList
como uma questão de boa codificação, mesmo quando o desempenho não é um problema - A principal (única?) desvantagem da API genérica é que ela é específica do Npgsql, tornando seu código não-portável para outros drivers de banco de dados (embora existe um problema por tornar isso (ou algo semelhante) parte do ADO.NET).