在Docker容器中使用EF Core迁移

41

我正在.NET Core 2.0中设置WebApi,将使用Entity Framework Core作为ORM。整个应用程序将部署为Docker容器。让我有点不安的是在这种情况下处理DB迁移的方式。我是指生产环境。以下是我所研究到的:

  • 我们只需要在应用程序启动时调用Database.Migrate()忘掉整个世界- 嗯,某种程度上我不喜欢它;-)
  • 由命令行参数驱动Database.Migrate()(运行带有指定参数的docker容器一次以迁移DB)
  • 登录应用程序容器并执行 dotnet ef database update
  • 基于迁移生成纯老式SQL,并从DB管理工具执行它。看起来老派但有效。我讨厌的是自己执行脚本。
  • 准备一个数据库容器,该容器已经从上述代码生成了脚本,并将自动执行它们。

还有其他建议吗?或者什么是最好的、最适当的解决方案?

敬礼


3
dotnet/dotnet-docker-samples#89 中进行了一些讨论。 - bricelam
我认为发布您的迁移信息会很有用,或者至少描述一下您拥有哪些类型的迁移 - 是仅使用配置引导DB还是将DB置于已知的应用程序状态? - ryanwebjackson
1个回答

1
在我看来,你提到的第一个点(启动时的Database.Migrate())最符合我们的使用情况。因此,对我来说,这是目前首选的方法。
我们在启动过程中还有一些其他情况:
- 本地Docker容器(用于开发环境和测试) - 自己的启动项目,执行Database.Migrate()部分(因为我们有多个具有自己数据库的项目) - 具有实际API网站的附加项目 :) - 在Azure SQL服务器上的生产环境(通过Azure DevOps管道发布和部署) - 迁移是通过dotnet ef ...在其自己的项目中创建的
dotnet ef migrations add "your migration name" --startup-project "path to your actually API" --context "database context name"
重要提示:必须首先更改工作目录以使用另一个启动项目,但在“迁移项目”中生成迁移文件。
在我们的情况下,使用不同的API并在幕后使用它们自己的数据库运行良好。
问候

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