Quiero saber una herramienta para usar para las migraciones de la base de datos de SQL Server y por qué a partir de 2017, ya que me preocupa este tema, para poder automatizar este proceso tanto como sea posible.
¿Qué opinas sobre las migraciones de Entity Framework Code First, suponiendo que estoy usando .Net?
Hay dos productos principales que conozco en el campo relativamente nuevo de la migración de bases de datos.
Flyway es básicamente una herramienta para organizar, rastrear y aplicar automáticamente una colección de scripts SQL que escribe.
Se puede usar desde la aplicación Java y desde la línea de comandos para entornos que no sean Java.
Libre de costo. Fuente abierta.
Liquibase es un competidor de Flyway y tiene el mismo propósito.
En nuestro proyecto (aplicación dotnet core alojada en Azure) usamos EF Core para administrar las migraciones de base de datos.
La configuración se ve así:
To add migration:
1. Open Visual Studio Package Manager Console
2. Add-Migration <migration-name> -Verbose -Project src\Infrastructure.AzureSql -StartupProject src\SampleProject
To generate sql script:
1. Open Visual Studio Package Manager Console
2. Script-Migration -Verbose -Idempotent -Output "deploy\sql\SampleDB.sql" -Project src\Infrastructure.AzureSql -StartupProject src\SampleProject
Y el proceso de realizar el cambio en el esquema de base de datos se ve de la siguiente manera:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>(builder =>
{
builder.ToTable("Product");
// Configuring new property
builder.builder.Property(product => product.Сategory).HasColumnType("nvarchar(32)");
builder.HasIndex(product => product.Category);
}
}
Add-Migration
comando: 20210323165355_Product-Add-Category.cs
. Detectará automáticamente los cambios en el modelo e incluirá las declaraciones correspondientes en el archivo, por ejemplomigrationBuilder.AddColumn<string>(name: "Category", table: "Product", type: "nvarchar(32)", nullable: true);
Add-Migration Product-Add-Category -Verbose -Project src\Infrastructure.AzureSql -StartupProject src\SampleProject
20210323165355_Product-Add-Category.cs
ya sea mediante la API fluida de MigrationBuilder predefinida o mediante el uso de SQL personalizado migrationBuilder.Sql(fillInProductCategoryScript);
; simplemente agregue el código junto con uno generado automáticamente. <DbContextName>ModelSnapshot.cs
. Si se realiza algún cambio manual en el esquema a través de SQL, debe reflejarse en la instantánea (y también en el archivo 20210323165355_Product-Add-Category.Designer.cs
que representa la instantánea del esquema después de aplicar la migración). Normalmente confiamos en los cambios de esquema generados automáticamente y solo agregamos scripts de transformación de datos personalizados a través de SQL.Script-Migration -Verbose -Idempotent -Output "deploy\sql\SampleDB.sql" -Project src\Infrastructure.AzureSql -StartupProject src\SampleProject
El comando vuelve a generar el script de migración en función de las migraciones que rodean los cambios con declaraciones condicionales:
IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20210323165355_Product-Add-Category')
BEGIN
ALTER TABLE [Product] ADD [Category] nvarchar(32) NULL;
END;
IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20210323165355_Product-Add-Category')
BEGIN
CREATE INDEX [IX_Product_Category] ON [Product] ([Category]);
END;
IF NOT EXISTS(SELECT * FROM [__EFMigrationsHistory] WHERE [MigrationId] = N'20210323165355_Product-Add-Category')
BEGIN
INSERT INTO [__EFMigrationsHistory] ([MigrationId], [ProductVersion])
VALUES (N'20210323165355_Product-Add-Category', N'3.1.3');
END;
GO
Tienen scripts de PowerShell que pueden hacer exactamente lo que necesitas. Y es gratis.
miguel domingos
albahaca bourque
miguel domingos
albahaca bourque
miguel domingos
Iván Samygin