在实体框架中生成迁移脚本时针对特定的数据库引擎版本

问题描述 投票:0回答:1

在使用 MariaDb 部署我的应用程序时,我使用 dotnet ef 生成迁移脚本:

dotnet ef migrations script --output script.sql

生成的脚本与用于开发的数据库引擎兼容,在我的例子中是 mariadb 10.6.12.

但是我的生产服务器使用 10.3,在我的迁移脚本中,我重命名了一个列,语法在 10.5 版本发生了变化。因此,脚本在重命名时失败。

那么,是否可以生成针对特定数据库引擎的迁移脚本,在我的例子中是 10.3?

信息:我无法生成连接到我的生产服务器的脚本,因为我使用 Terraform 部署了所有基础设施并动态应用了迁移脚本。

sql entity-framework mariadb
1个回答
0
投票

我找到了一个解决方法来生成针对特定 MariaDb 版本的迁移脚本:在 Docker 中运行它。

通过编辑 appsettings.json 中的默认连接来准备您的应用程序:

"ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=MySchema;Uid=MyUser;Pwd=password;"

使用以下Powershell脚本生成脚本。确保凭据与您的 appsettings.json 中的凭据相同

# Version of MariaDb to instanciate
param(
    [Parameter()]
    [string]$EngineVersion
)

#Pull and launch a mariadb container in targeted version image
docker run -e MYSQL_ROOT_PASSWORD=mypass -p 3306:3306 -d --name dummymaria mariadb:$EngineVersion
# Wait 10s in order MariaDb is up and running
Write-Host "Wait 10s MariaDb instance had started..."
Start-Sleep 10

# Create the schema 
docker exec -it --env MYSQL_PWD=mypass dummymaria mysql -u root -v -e "CREATE SCHEMA MySchema;"
# Create a user (use the same user as in you appsettings.json and same password)
docker exec -it --env MYSQL_PWD=mypass dummymaria mysql -u root -v -e "CREATE USER 'MyUser'@'%' identified by 'password';"
# grant all privileges for any hosts
docker exec -it --env MYSQL_PWD=mypass dummymaria mysql -u root -v -e "GRANT ALL PRIVILEGES on MySchema.* to'MyUser'@'%';"
# flush privileges
docker exec -it --env MYSQL_PWD=mypass dummymaria mysql -u root -v -e "FLUSH PRIVILEGES;"

# generate the migration script. The tool will connect to the container
dotnet ef migrations script --output script-$EngineVersion.sql  --idempotent

# Destroy the container
docker rm dummymaria --force

生成的脚本 (

script-10.3.sql
) 应该与目标数据库兼容。

© www.soinside.com 2019 - 2024. All rights reserved.