如何在使用多个上下文时强制EF生成单个MigrationHistory表

时间:2016-11-25 15:10:49

标签: c# .net sql-server database entity-framework-6

TLDR:

我有两个EF上下文"储物柜"和"报告"。我想看一个__MigrationHistory表。我想制作"报告" context使用迁移历史记录表" locker"上下文正在使用,同时保留"报告"上下文数据"报告"数据库架构。

背景故事

我们的项目开始时只有一个EF上下文"储物柜"。我们有自己的IDatabaseInitializer类实现,其行为与System.Data.Entity.MigrateDatabaseToLatestVersion类似:

    public class CheckAndMigrateDatabaseToLatestVersion<TContext, TMigrationsConfiguration>
    : IDatabaseInitializer<TContext>
    where TContext : DbContext
    where TMigrationsConfiguration : DbMigrationsConfiguration<TContext>, new()
{
    public virtual void InitializeDatabase(TContext context)
    {
        var migratorBase = ((MigratorBase)new DbMigrator(Activator.CreateInstance<TMigrationsConfiguration>()));
        if (migratorBase.GetPendingMigrations().Any())
            migratorBase.Update();
    }
}

实施的迁移配置类DbMigrationsConfiguration<LockerContext> 除此之外,一切似乎只是开箱即用的标准。 这种方式表是在&#34; dbo&#34;下的数据库中生成的。架构。

然后有一天又添加了另一个背景 - &#34;报告&#34;。首先,迁移配置类实现了DropCreateDatabaseIfModelChanges<ReportContext>。我们正在开发一段时间。并且相关的报告表是在报告模式下创建的,但只生成了一个dbo .__ MigrationHistory表,并且报告上下文也在使用。

不幸的是,我们将其投入生产。直到一段时间后我们才注意到我们的错误。所以现在我们有一个充满数据的生产数据库,有两个模式&#34; dbo&#34;和&#34;报告&#34;并仅使用迁移历史记录表。

最近,我们的报告迁移配置类正在实施DbMigrationsConfiguration<ReportContext>,并且已启用迁移。这不会因为部署原因而困扰我,因为我确保初始迁移ID和哈希在生产数据库和我们的代码库中是相同的。 困扰我的问题是,我们所有的开发,qa和潜在的即将到来的生产环境都具有与当前生产数据库结构不同的数据库结构。 所以我希望我们的代码首次迁移生成的数据库与我们的生产数据库具有相同的结构。

0 个答案:

没有答案