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
<PackageReference Include="DS.Foundation.Data" Version="8.4.2" />
<PackageVersion Include="DS.Foundation.Data" Version="8.4.2" />
<PackageReference Include="DS.Foundation.Data" />
paket add DS.Foundation.Data --version 8.4.2
#r "nuget: DS.Foundation.Data, 8.4.2"
#:package DS.Foundation.Data@8.4.2
#addin nuget:?package=DS.Foundation.Data&version=8.4.2
#tool nuget:?package=DS.Foundation.Data&version=8.4.2
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 unDataStoreOptions.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 deCustomVersionTableMetaDatay pásela conSetVersionTableMetaDataType(typeof(MiTabla)). ScanInAllAssemblies()busca en los ensamblados cargados las clases que implementanIFluentMigratorRepository.Runes 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 porId;==yEqualscomparanId.AuditableEntity<T>: agregaDeleted,AudWhen(ticks UTC),AudWhoyAudWhat.DapperGuidEntity:IdGuidgenerado al construir.DapperAuditableEntityagregaIsDeletedyUpdateDateTime(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.Addni 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
ConnectionStringniSecurity.Passwordenappsettings.jsonversionado. - No usar
MultipleNonQueryOptimizercon sentencias de más de 4096 caracteres: lanza una excepción.
Cambios
Ver CHANGELOG.md.
| Product | Versions 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. |
-
.NETStandard 2.0
- DS.Foundation (>= 8.4.1)
- FluentMigrator.Extensions.Postgres (>= 6.2.0)
- FluentMigrator.Extensions.SqlServer (>= 6.2.0)
- FluentMigrator.Runner.Core (>= 6.2.0)
- FluentMigrator.Runner.MySql (>= 6.2.0)
- FluentMigrator.Runner.Postgres (>= 6.2.0)
- FluentMigrator.Runner.SqlServer (>= 6.2.0)
- Microsoft.Extensions.Caching.Memory (>= 8.0.1)
- MySqlConnector (>= 2.6.2)
- Npgsql (>= 8.0.9)
- System.Text.Json (>= 8.0.6)
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 |