如何使用 Docker 在 SQL Server 数据库上运行 EF Core 迁移?

Posted

技术标签:

【中文标题】如何使用 Docker 在 SQL Server 数据库上运行 EF Core 迁移?【英文标题】:How to run EF Core migrations on SQL Server database using Docker? 【发布时间】:2019-04-11 12:23:58 【问题描述】:

在 Mac 上,我有一个带有一些实体框架迁移的 Net Core 2.1 类库。

我需要使用 Docker 运行 SQL Server 并使用预览迁移更新数据库。

我在我的项目中添加了一个 docker-compose.yml 文件:

docker-compose.yml
src
  data
    project.data.csproj

docker-compose.yml 文件如下:

services:
  data:
    build: .
    depends_on:
      - database
  database:
  image: "microsoft/mssql-server-linux"
  environment:
    SA_PASSWORD: "Pass.word123"
    ACCEPT_EULA: "Y"

目前这不起作用。

如何在 Mac 中使用 docker 在 SQL Server 上运行 EF Core 迁移?

【问题讨论】:

在我看来有两种方法,让 Docker 在容器构建期间执行 dotnet ef database update 或在运行时您可以使用 Database.Migrate(),这适合您的情况吗? 我使用 dotnet ef 数据库更新 您的要求正在讨论中in this issue on GitHub 这是一个很好的问题,但我认为目前还没有可靠的解决方案。 正如@AdamVincent 建议的那样,运行时迁移对我来说似乎是自然的解决方案。如果您出于某种原因想要手动运行迁移,请在 program/appsettings 中添加一些参数来控制行为 【参考方案1】:

您需要在启动文件的配置中添加以下行。它将在应用程序启动时执行。它将所有迁移文件更新到数据库。

using (IServiceScope scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
            
                scope.ServiceProvider.GetService<MyDBCOntext>().Database.Migrate();
            

这对我有用。

【讨论】:

以上是关于如何使用 Docker 在 SQL Server 数据库上运行 EF Core 迁移?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Docker 在 SQL Server 数据库上运行 EF Core 迁移?

如何在不使用 Docker 或 Windows Server 2016 上的 Confluent 平台的情况下在 Kafka 中设置 Debezium SQL Server 连接器?

如何在 SQL Server docker 映像之上安装 PowerShell Core?

如何在 Mac 上将 ASP.Net Core 连接到 SQL Server Docker 容器

如何在 Docker 上的 SQL Server 中从数据库备份中查看 .bak 文件

如何从 Azure Data Studio 与 Docker 中托管的 SQL Server 2019 容器进行通信