sql >> Base de Datos >  >> RDS >> PostgreSQL

Parámetros de Npgsql 4.0 y valores nulos

La nueva API de parámetros genéricos tiene un problema:debería aceptar .NET null regular. (y no DBNull.Value ), he abierto este problema para rastrear esto, se arreglará en 4.0.3.

Tenga en cuenta que como la nota de documentación dice, el objetivo de la API genérica es evitar usar el Value propiedad, que es de tipo object . Si usa el NpgsqlParameter<int> genérico pero asigna Value , su int estará encuadrado, anulando el propósito de la API. Debería estar asignando a TypedValue , que es de tipo int y no caja. Esta es también la razón por la que no puede asignar DBNull.Value para indicar un valor nulo (es un tipo diferente de .NET).

Algunas notas sobre si se debe usar esta nueva API genérica:

  • Si está escribiendo muchos tipos de valores (por ejemplo, int , DateTime ...) esto eliminará todas las asignaciones de boxeo. Si esto va a ser significativo depende de su aplicación:perfile cuidadosamente.
  • Las API genéricas en general siempre deben preferirse a las no genéricas cuando el tipo se conoce en tiempo de compilación. Esto permite que el compilador verifique la corrección del tipo antes y hace que su código sea más claro; usamos List<string> en lugar de ArrayList como una cuestión de buena codificación incluso cuando el rendimiento no es un problema
  • El principal (¿único?) inconveniente de la API genérica es que es específico de Npgsql, lo que hace que su código no sea portátil para otros controladores de base de datos (aunque existe un problema por hacer esto (o algo similar) parte de ADO.NET).