EFCore:迁移和初始数据库创建

时间:2019-10-23 09:50:59

标签: entity-framework-core ef-code-first ef-migrations

我正在使用EFCore(最近从EF迁移)来进行代码优先的DB,并进行了代码迁移。每当我创建新迁移时,EFCore都会更新上下文模型快照。因此,当我使用

从头开始创建新数据库时
using (var db = new AudmDatabaseContext())
{
    if (!db.Database.GetService<Microsoft.EntityFrameworkCore.Storage.IRelationalDatabaseCreator>().Exists())
    {
        db.Database.EnsureCreated();
    }
}

我具有当前的数据库结构。但是,当我拥有现有系统时,我需要运行迁移

using (var db = new AudmDatabaseContext())
{
    if (db.Database.GetService<Microsoft.EntityFrameworkCore.Storage.IRelationalDatabaseCreator>().Exists())
    {
            var pendingMigrations = db.Database.GetPendingMigrations();
            if (pendingMigrations.Count() > 0)
            {
                db.Database.Migrate();
             }
         }
     }
}

现在,假设我使用数据库创建代码创建了一个新数据库。然后在以后的某个时刻,我将更改数据库架构,因此我需要运行迁移。但是,当我这样做时,我将所有迁移都挂起,迁移器尝试对已经进行的数据库模式进行更改-显然不起作用。 (请注意,我的初始迁移已注释掉所有代码,否则它将再次创建整个数据库,但这已通过db.Database.EnsureCreated()完成)

那么这里推荐的方法是什么?我需要能够为我的软件的新安装创建新的数据库,并且需要迁移(因此我实际上将我的应用设置为在启动时自动执行迁移,以免丢失任何更改)。

想到的最明显的是带有某种标志,该标志告诉迁移器运行迁移,但是在执行初始创建时实际上不执行任何sql代码-因此,新创建的数据库似乎已经完全迁移到迁移器。.稍后,当我进行新的挂起迁移时,将仅执行自创建初始数据库以来已添加到代码中的这些新的挂起迁移。

我很好奇其他人在做什么,因为我似乎无法在官方文档中找到解决此问题的推荐方法。

0 个答案:

没有答案