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 deArrayListcomo 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).