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

10

在 Mac 上,我有一个 .NET Core 2.1 类库,其中包含一些 Entity Framework 迁移。

我需要使用 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运行EF Core迁移并连接到SQL Server?


2
从我的角度来看,有两种方法可以实现。第一种是在容器构建期间让Docker执行dotnet ef database update命令;第二种是在运行时使用Database.Migrate()方法。你觉得哪种方法更适合你的情况? - Adam Vincent
我使用 dotnet ef database update。 - Miguel Moura
你所询问的内容正在GitHub上的此问题讨论中 - Adam Vincent
这是一个好问题,但我认为目前还没有一个确定的解决方案。 - Adam Vincent
正如@AdamVincent所建议的那样,运行时迁移对我来说似乎是一种自然的解决方案。如果您因某种原因想要手动运行迁移,请添加一些参数到程序/应用设置中以控制其行为。 - Karel Křesťan
我终于在这篇帖子中找到了解决这个问题的方法:https://dev59.com/Yrnoa4cB1Zd3GeqPKyOF?rq=3 - Vladislav Khomchenko
1个回答

3

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

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

这对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接