Para qué sirve este script?
El script fue creado para automatizar la actualización de la estructura de las bases de datos (tablas, columnas, relaciones) en un sistema que trabaja con múltiples sedes o “tenants”. En lugar de hacer este proceso manualmente para cada base de datos, el script lo hace por ti, una por una.
¿Cómo funciona?
- Lee las cadenas de conexión definidas en el archivo appsettings.json. Estas cadenas corresponden a las diferentes sedes (tenants) del sistema.
- Crea una nueva migración, que es un archivo que contiene instrucciones sobre qué tablas o columnas se deben crear o modificar.
- Luego, aplica esa migración a cada base de datos correspondiente, utilizando la conexión específica de cada tenant.
¿Qué es una migración?
Una migración es un cambio en la estructura de la base de datos. Por ejemplo, si se crea una nueva tabla para agendar citas, ese cambio se registra como una migración. Entity Framework se encarga de convertir esas instrucciones en comandos SQL.
Ventajas de esta implementación
- Ahorra tiempo al evitar repetir el proceso manual para cada base de datos.
- Reduce errores humanos al automatizar todo.
- Se asegura de que todas las sedes (tenants) tengan la misma estructura.
- Muy útil para aplicaciones con arquitectura multitenant, como una IPS con varias sedes.
¿Dónde debe estar el script?
El script debe estar ubicado fuera de las carpetas del proyecto, por ejemplo, en una carpeta llamada Script, y debe tener correctamente referenciada:
- La ruta al archivo appsettings.json (por ejemplo: 02.Service/API/appsettings.json)
- La ruta al archivo .csproj del proyecto donde está el AppDbContext (por ejemplo: 00.Persistence/Infrastructure/Infrastructure.csproj)
¿Cómo se ejecuta?
1. Abre PowerShell.
2. Ubícate en la carpeta donde se encuentra el script .ps1:
cd C:\Repos\TuProyecto\Script
3. Ejecuta el script con permisos de ejecución:
.\MigrateAllTenants.ps1
4. El script te pedirá el nombre de la migración que deseas crear (por ejemplo: AddAppointmentsTable).
5. Luego comenzará a actualizar todas las bases de datos definidas en appsettings.json.
Requisitos para que funcione
- Tener instalado el SDK de .NET 8.
- Tener Entity Framework Core instalado como herramienta global:
dotnet tool install –global dotnet-ef
- Haber configurado correctamente el AppDbContext y el AppDbContextFactory.
Conclusión
Esta solución permite mantener sincronizadas todas las bases de datos de una arquitectura multitenant, evitando que debas actualizar manualmente cada una. Es ideal para sistemas que prestan servicios a múltiples sedes, como una plataforma médica para una IPS.