为 ASP.NET Core 中的开发和生产环境更新 Entity Framework 中的数据库
Updating databases in Entity Framework for development and production environments in ASP.NET Core
如何将 EF 迁移应用到多个数据库,根据需要引用开发或生产环境?
TL;DR
我正在使用 Entity Framework 开发一个 ASP.NET 核心 MVC 应用程序,该应用程序为开发和生产引用不同的数据库。两个数据库都托管在 Azure SQL 数据库中。
应用程序目前 运行 在我的开发机器上的 IIS Express 上运行,但我会将生产环境部署到 Azure 应用服务。我正在使用 Entity Framework 和迁移来更新数据库设计。
我已应用 为开发或生产启动配置使用不同的数据库连接字符串,这似乎有效。然后将连接字符串存储在 appsettings.Development.json
或 appsettings.Production.json
.
中
当我 select DEV 启动配置时,我可以使用 EF cli 命令 dotnet ef database update
将我的迁移应用到开发数据库。工作正常。
但是,当我 运行 在 PROD 启动配置下时,我不知道如何告诉 Visual Studio 将每个迁移应用到生产数据库。
运行 更改启动配置后的命令 dotnet ef database update
继续引用开发数据库,没有任何变化。 对此我并不感到惊讶 - 我还没有告诉 Visual Studio 在哪里可以找到其他数据库。但我也不知道该怎么做。
有没有办法根据启动配置或环境变量更改引用的数据库?或者其他方便的方式?
launchSettings.json
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:57961",
"sslPort": 44320
}
},
"profiles": {
"IIS Express (dev)": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express (prod)": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
}
}
根据documentation,可以将连接字符串指定为额外参数:
--connection: The connection string to the database. Defaults to the one specified in AddDbContext or OnConfiguring.
所以这个命令会让你指定你的目标数据库:
dotnet ef database update --connection "<sql connection string>"
如何将 EF 迁移应用到多个数据库,根据需要引用开发或生产环境?
TL;DR
我正在使用 Entity Framework 开发一个 ASP.NET 核心 MVC 应用程序,该应用程序为开发和生产引用不同的数据库。两个数据库都托管在 Azure SQL 数据库中。
应用程序目前 运行 在我的开发机器上的 IIS Express 上运行,但我会将生产环境部署到 Azure 应用服务。我正在使用 Entity Framework 和迁移来更新数据库设计。
我已应用 appsettings.Development.json
或 appsettings.Production.json
.
当我 select DEV 启动配置时,我可以使用 EF cli 命令 dotnet ef database update
将我的迁移应用到开发数据库。工作正常。
但是,当我 运行 在 PROD 启动配置下时,我不知道如何告诉 Visual Studio 将每个迁移应用到生产数据库。
运行 更改启动配置后的命令 dotnet ef database update
继续引用开发数据库,没有任何变化。 对此我并不感到惊讶 - 我还没有告诉 Visual Studio 在哪里可以找到其他数据库。但我也不知道该怎么做。
有没有办法根据启动配置或环境变量更改引用的数据库?或者其他方便的方式?
launchSettings.json
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:57961",
"sslPort": 44320
}
},
"profiles": {
"IIS Express (dev)": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express (prod)": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
}
}
根据documentation,可以将连接字符串指定为额外参数:
--connection: The connection string to the database. Defaults to the one specified in AddDbContext or OnConfiguring.
所以这个命令会让你指定你的目标数据库:
dotnet ef database update --connection "<sql connection string>"