EF Core 迁移——多数据库

EF Core Migration - multiple databases

有没有办法 运行 在具有相同表集的多个数据库上迁移 EF Core。这适用于多租户架构,其中有一个主数据库(具有所有租户数据库的元数据,包括租户数据库连接字符串)和每个租户一个数据库,具有相同的数据库对象集。当在 SaaS 模型中自动创建新的租户数据库时,我们需要能够 运行 这些迁移,并且只要数据库结构发生变化(新列、数据类型更改、新索引等)

我在 EF Core's GitHub 上发布了这个完全相同的问题。

答案是,它不能在设计时完成。您基本上需要在每个租户的数据库上手动 运行 迁移脚本。

然而,在 运行 时执行迁移很容易。您可以在应用程序启动时(如果是 Web 应用程序,则在 WebHost.Run() 之前)为每个连接字符串实例化一个 dbContext 并像这样执行迁移:dbContext.Database.Migrate();

当然,这并不理想,因为它使您更难使用 Visual Studio 程序包管理器控制台或 CLI 使用 dotnet ef[=22 将迁移回滚到特定点=] 命令。

可以为 CLI 命令提供连接字符串。因此,您可以 运行 每个数据库一次,为每个数据库提供连接字符串。

命令如下所示:
dotnet ef database update --connection "Server=client1.db;Database=client1"