PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Parâmetros e valores nulos do Npgsql 4.0


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 de ArrayList 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).