Entity Framework 6.1.3 从代码优先模型初始化现有的空数据库

Entity Framework 6.1.3 initialize existing, but empty database from code-first model

我在准备在生产系统上发布的应用程序时遇到了一些问题。

情况:

我正在尝试做的事情:

我试过的:

问题

问题:

如何使用迁移中的 InitialCommit-Up() 脚本初始化现有数据库?

或者我错过了一些非常明显的点,为什么这种数据库初始化不应该发生?有什么我不知道的适合我的情况的最佳做法吗?

MigrateDatabaseToLatestVersion 初始化程序应该可以工作,即使没有 __MigrationHistory table。它应该在第一次迁移 运行 时创建。

正如您在原始问题的评论中所说,调用 SetInitializer 方法时需要为 MigrateDatabaseToLatestVersion 的构造函数参数提供正确的值:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<RapasiDbContext, Configuration>(true, new Configuration()));

正如the reference page所说,构造函数中的布尔参数指定是否使用触发初始化的上下文中的连接信息来执行迁移。如果缺少此参数,将从使用默认构造函数或注册工厂构造的上下文中获取连接信息(这可能不是您需要的)。

此外,我认为您可能错误地解释了 AutomaticMigrations 配置。这并不意味着您的迁移将自动应用,这意味着如果您在模型更改后没有手动 运行 添加迁移,它们将自动生成。我想您希望在您的数据库不是最新时执行您的挂起迁移,即使禁用了 AutomaticMigrations。