Dinaup.Database
Dinaup.Database es el módulo de acceso a PostgreSQL incluido dentro del paquete Dinaup. Ofrece una interfaz directa para trabajar con la base de datos sin lidiar con DataReader ni boilerplate de ADO.NET. Cubre:
Conexión a PostgreSQL con SSL y cadenas en formato estándar.
Lecturas tipadas (listas, diccionarios, modelos) sin lidiar con
DataReader.Inserción, actualización y upsert (insertar o actualizar según exista el registro).
Lectura por lotes de grandes volúmenes de datos.
Mapeo automático a clases de negocio mediante interfaces simples.
Acceso multihilo seguro y reutilización de conexión.
Instalación
Dinaup.Database forma parte del paquete principal de Dinaup. Ya no se distribuye como paquete independiente: instalando Dinaup ya tienes PGClient y todas las utilidades de base de datos disponibles.
dotnet add package Dinaupusing Dinaup.Database;En versiones anteriores Dinaup.Database era un NuGet aparte (dotnet add package Dinaup.Database). Si actualizas un proyecto antiguo, basta con eliminar esa referencia: el namespace y la API son los mismos.
Clase Principal: PGClient
La clase PGClient proporciona métodos para:
Conexión y reconexión a PostgreSQL (con SSL si se requiere).
Ejecución de sentencias SQL.
Lectura de resultados (listas, diccionarios, modelos).
Inserción, actualización, y operaciones de upsert.
Lectura de datos en lotes.
Propiedades Principales
IsConnected(bool): Indica si la conexión está abierta.Host,Port,UserName,Password,DatabaseName: Parámetros de conexión.UseSSL: Indica si se usa SSL.Description: Descripción opcional de la conexión.TablesAndColumns: Diccionario opcional de tablas a columnas.
Establecer Conexión
Conexión con parámetros separados:
Con SSL (cadena estilo URL):
Con SSL (parámetros separados):
Lectura de Datos
ReadValue(string SQL): Retorna un único valor (cadena).ReadList(string SQL): Retorna una lista de cadenas (asumiendo una sola columna).ReadDictionary(string SQL): Retorna unDictionary<string, string>a partir de pares clave-valor.ReadDictionaryList(string SQL): Retorna una lista de diccionarios (una fila por diccionario).ReadObjectList<T>(string SQL)(donde T: BaseModelConverter): Retorna una lista de objetos T mapeados desde la BD.
Ejemplos:
Lectura de Modelos
Si se dispone de clases que heredan de BaseModelConverter, puede mapearse directamente:
Inserción, Actualización y Upsert
InsertRecord(tableName, record): Inserta un diccionario como registro.InsertRecords(tableName, records): Inserta múltiples registros a la vez.UpdateRecord(tableName, dataDict, idField, idValue): Actualiza el registro cuyo campoidFieldcoincide conidValue.InsertOrIgnoreRecord(tableName, dataDict): Inserta el registro si no hay conflicto.InsertOrUpdateRecord(tableName, dataDict, idField): Inserta o actualiza según exista el registro.InsertOrUpdateRecords(tableName, dataDicts, idField): Inserta o actualiza múltiples registros.
Ejemplo: Insertar un registro
Ejemplo: Actualizar un registro
Ejemplo: Upsert (insertar o actualizar)
Lectura en Lotes (Batch Reading)
Para grandes cantidades de datos:
BatchReadDictionaries(description, countSQL, dataSQL, batchSize): Iterador que produce lotes de diccionarios.BatchReadObjects<T>(description, countSQL, dataSQL, batchSize): Igual que el anterior pero para objetos de tipo T.
Ejemplo:
Clonar Conexiones
DuplicateConnection() crea una nueva instancia PGClient con la misma configuración y abre la conexión.
Manejo de Errores
Se pueden capturar excepciones con try...catch.
Liberación de Recursos
PGClient implementa IDisposable, por lo que es recomendable usar using:
Ejemplos Completos
Ejemplo 1: Leer todos los registros (c#)
Ejemplo 2: Insertar y luego leer modelos (c#)
Ejemplo 3: Actualizar o Ignorar si existe (c#)
Última actualización