首页 > 解决方案 > 如何为 EF 核心迁移历史记录表设置自定义名称并在生成迁移脚本时使用它?

问题描述

我有一个使用 EF Core 的 ASP.NET Core 项目,并且已经使用默认迁移历史记录表 ( dbo.__EFMigrationsHistory) 运行了迁移。我想将所有迁移存储在具有不同名称和架构的表中。

ConfigureServices(内Startup.cs)我有以下代码(根据文档):

serviceCollection.AddDbContext<DatabaseContext>(
    options =>
    {
        options.UseSqlServer(
            connectionString,
            x => x.MigrationsHistoryTable("__MigrationHistory", "MySchema"));
    });

我手动创建了MySchema.__MigrationHistory表,从 复制了所有数据dbo.__EFMigrationsHistory,然后删除了dbo.__EFMigrationsHistory

我原以为这意味着所有未来的迁移都会进入MySchema.__MigrationHistory,但是当我添加一个空白迁移作为测试并运行script-migration -from previousMigrationName(从 Visual Studio 包管理器控制台)它给我的 SQL 时,它会将历史记录添加到dbo.__EFMigrationsHistory.

MySchema.__MigrationHistory为了让 EF Core用于所有新迁移,我还需要做什么?

标签: sql-serverasp.net-coreentity-framework-core

解决方案


事实证明,这个问题的原因是我不明白 EF Core 是如何配置为DbContext在与 ASP.NET Core 应用程序不同的程序集中运行迁移的。

ASP.NET Core 应用程序有一个Startup.cs我修改过的,但我不知道DbContext包含IDesignTimeDbContextFactory. 在这个类中,还有另一个对该UseSqlServer方法的调用,我也需要在那里添加选项。这是实际用于迁移的内容,因为它们不通过 ASP.NET Core 应用程序。


推荐阅读