DS.Foundation.Data 8.4.2

dotnet add package DS.Foundation.Data --version 8.4.2
                    
NuGet\Install-Package DS.Foundation.Data -Version 8.4.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DS.Foundation.Data" Version="8.4.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="DS.Foundation.Data" Version="8.4.2" />
                    
Directory.Packages.props
<PackageReference Include="DS.Foundation.Data" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add DS.Foundation.Data --version 8.4.2
                    
#r "nuget: DS.Foundation.Data, 8.4.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package DS.Foundation.Data@8.4.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=DS.Foundation.Data&version=8.4.2
                    
Install as a Cake Addin
#tool nuget:?package=DS.Foundation.Data&version=8.4.2
                    
Install as a Cake Tool

DS.Foundation.Data

Acceso a datos común para aplicaciones DS:

  • DatabaseAccessPointOptions, que describe una conexión (motor, cadena de conexión y esquema).

  • DatabaseAccessPointFactory, que arma esa conexión desde un DataStoreOptions.

  • FluentMigratorUpdater, que ejecuta migraciones de FluentMigrator.

  • Administradores de bases de datos para SQL Server, PostgreSQL y MySQL.

  • Clases base de entidades para Dapper y NHibernate.

  • Target framework: netstandard2.0.

  • Dependencias: DS.Foundation, FluentMigrator 6.2 (runners de SQL Server, PostgreSQL y MySQL), Npgsql, MySqlConnector.

Instalación

<PackageReference Include="DS.Foundation.Data" Version="8.4.1" />

Registro

El paquete no registra servicios en DI. Las clases se crean directamente con un DatabaseAccessPointOptions. Para registrar NHibernate use el paquete DS.Foundation.NHibernate.

Configuración

DatabaseAccessPointOptions

Propiedad Tipo Valor por defecto Obligatoria
Engine DbEngine (SqlServer, PostgreSQL, MySQL, SQLite, MariaDB, Oracle) 0 (sin motor) Sí
ConnectionString string "" Sí
Schema string "" No. Si tiene valor, FluentMigrator aplica las migraciones en ese esquema
Version string "" No

Cadenas generadas por DatabaseAccessPointFactory.CreateFrom(DataStoreOptions)

Solo para DataStoreOptions.Type == Database; con otro tipo devuelve null. Usa Host, Port, Path (nombre de la base), Security.Username y Security.Password.

Motor Formato Esquema
MySQL, MariaDB Server=…;Port=…;Database=…;User ID=…;Password=… ""
SQL Server Server=host,port;Database=…;User ID=…;Password=…;TrustServerCertificate=True dbo
PostgreSQL Host=…;Port=…;Database=…;Username=…;Password=… public
Oracle Data Source=host:port/path;User ID=…;Password=… ""
SQLite Data Source=path ""

El motor por defecto de la fábrica es MySQL (new DatabaseAccessPointFactory()).

Los valores con ;, = o comillas (por ejemplo, una contraseña) se entrecomillan según el formato de cadenas de conexión de ADO.NET, así que no rompen la cadena.

En SQL Server, TrustServerCertificate=True acepta el certificado del servidor sin validarlo. Es el valor por defecto por compatibilidad; en producción, con un certificado de confianza, desactivarlo:

var factory = new DatabaseAccessPointFactory(DbEngine.SqlServer) { TrustServerCertificate = false };

Uso

Ejecutar migraciones

using DS.Foundation.Configuration;
using DS.Foundation.Configuration.Options;
using DS.Foundation.Data.FluentMigrator;

var dap = new DatabaseAccessPointOptions
{
    Engine = DbEngine.PostgreSQL,
    ConnectionString = connectionString,
    Schema = "public",
};

new FluentMigratorUpdater(dap)
    .ScanIn(typeof(MiPrimeraMigracion).Assembly)
    .Run();              // todas las migraciones pendientes

new FluentMigratorUpdater(dap)
    .ScanIn(typeof(MiPrimeraMigracion).Assembly)
    .Run("datos-demo");  // solo las migraciones con [Tags("datos-demo")]
  • Motores soportados por FluentMigratorUpdater: SQL Server, PostgreSQL, MySQL y MariaDB (con el runner de MySQL 8).
  • La tabla de versiones es __fm_migration_history (CustomVersionTableMetaData). Para usar otra, herede de CustomVersionTableMetaData y pásela con SetVersionTableMetaDataType(typeof(MiTabla)).
  • ScanInAllAssemblies() busca en los ensamblados cargados las clases que implementan IFluentMigratorRepository.
  • Run es sincrónico y escribe el log de FluentMigrator en la consola.

Crear la conexión desde DataStoreOptions

var dap = new DatabaseAccessPointFactory(DbEngine.SqlServer).CreateFrom(dataStoreOptions);

Administrar bases (pruebas y herramientas)

var manager = new PostgresDbManager(dap);
List<string> tablas = manager.ListTables();   // esquema public
manager.Execute("UPDATE ...");                // sentencia sin parámetros
manager.Reset();                               // DROP DATABASE + CREATE DATABASE de la base de la cadena

Reset() en PostgreSQL y SQL Server se conecta a la base de mantenimiento (postgres o master), así que el usuario necesita acceso a ella y permiso para crear bases. Falla si otras sesiones están usando la base.

Entidades

  • AgnosticEntity<T>: identidad por Id; == y Equals comparan Id.
  • AuditableEntity<T>: agrega Deleted, AudWhen (ticks UTC), AudWho y AudWhat.
  • DapperGuidEntity: Id Guid generado al construir. DapperAuditableEntity agrega IsDeleted y UpdateDateTime (hora local).
  • NHibernateEntity<T>: igualdad compatible con entidades transitorias de NHibernate.

Errores frecuentes

Síntoma Causa Solución
Exception: database engine not supported FluentMigratorUpdater con SQLite, Oracle o sin Engine Usar SQL Server, PostgreSQL, MySQL o MariaDB
No se aplica ninguna migración con ScanInExecutingAssembly() (advertencia CS0618) Está obsoleto: escanea DS.Foundation.Data y no su ensamblado Usar ScanIn(typeof(UnaMigracion).Assembly)
No se aplica ninguna migración con ScanInCallingAssembly() Escanea el ensamblado que llama al método, que puede no ser el de las migraciones Usar ScanIn(typeof(UnaMigracion).Assembly)
Run() falla sin haber llamado a ScanIn… No hay ensamblados para escanear Llamar a un método ScanIn… antes de Run
ArgumentException al crear un *DbManager La cadena de conexión no tiene formato válido (por ejemplo, un valor con ; sin comillas) Entrecomillar el valor o generar la cadena con DatabaseAccessPointFactory
InvalidOperationException en Reset() La cadena no tiene Database (ni Initial Catalog) Agregar la base a la cadena
MySqlDbManager.ListDatabases() devuelve una lista vacía Limitación conocida: escribe los nombres en la consola y no los agrega a la lista Consultar SHOW DATABASES directamente

Qué no hacer

  • No pasar datos de usuario a Execute, MultipleNonQueryOptimizer.Add ni a los nombres de base: el SQL se envía tal cual, sin parámetros.
  • No usar Reset() contra bases productivas: elimina y recrea la base de datos.
  • No guardar ConnectionString ni Security.Password en appsettings.json versionado.
  • No usar MultipleNonQueryOptimizer con sentencias de más de 4096 caracteres: lanza una excepción.

Cambios

Ver CHANGELOG.md.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on DS.Foundation.Data:

Package Downloads
DS.Foundation.NHibernate

Package Description

DS.Foundation.Data.Tactica

Package Description

DS.Foundation.Data.FluentMigrator

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
8.4.2 153 10/19/2026
8.4.1 101 10/19/2026
8.4.0 134 10/19/2026
8.3.6 176 9/17/2026
8.3.5 132 9/17/2026
8.3.4 661 6/7/2026
8.3.3 150 6/2/2026
8.3.1 156 5/31/2026
8.2.5 413 3/7/2026
8.2.4 246 1/28/2026
8.2.3 173 1/28/2026
8.2.2 276 12/23/2025
8.2.1 853 8/6/2025
8.1.26 565 6/8/2025
8.1.25 417 4/9/2025
8.1.6 340 4/4/2025
8.1.5 310 2/27/2025
8.1.4 341 12/12/2024
8.1.3 291 10/11/2024
8.1.2 309 9/23/2024
Loading failed