【问题标题】:Should we need to add explicit db migrations when using MigrateDatabaseToLatestVersion?使用 MigrateDatabaseToLatestVersion 时是否需要添加显式数据库迁移?
【发布时间】:2014-07-01 06:55:10
【问题描述】:

最近我遇到了 EF codefirst 数据库迁移的问题。我们已将 MigrateDatabaseToLatestVersion 用于 DB 初始化程序。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<TestDataContext, MyConfiguration>());

internal sealed class MyConfiguration : DbMigrationsConfiguration<TestDataContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
...

问题是 - 我们不小心使用以下命令运行了旧的数据库迁移文件:

Update-database -TargetMigration some_old_test_migration_cs_file

这导致我们丢失了最新的实体架构更改,并且我们无法将最新的更改推送到数据库。在浪费了大量时间进行故障排除后,我们通过从表 __MigrationHistory 中删除迁移历史记录来解决该问题。

我的问题是 - 尽管我们启用了自动迁移,但我们是否还应该在实体(代码级别)更改时添加迁移脚本?

这方面的最佳做法是什么?

【问题讨论】:

    标签: entity-framework entity-framework-migrations


    【解决方案1】:

    如果您使用的是自动迁移,则无需自己编写任何显式迁移的代码。当您创建上下文时,Entity Framework 将自动更新数据库以匹配您的实体的当前状态。

    【讨论】:

    • 生产系统呢。启用 AutomaticMigrations 是一种好习惯吗?如果是,数据丢失怎么办?
    • 这取决于您的系统。最好的做法是彻底测试应用程序以确保您的数据库迁移不会导致问题,但在那之后,如果没有其他人期望数据库以某种方式运行,那么迁移只是自动化一个如果手动完成可能会出错的步骤,所以我认为在生产中使用它们没有问题。至于数据丢失,如果您不想这样,请设置AutomaticMigrationDataLossAllowed = false;,并在您的更改无法在不更改数据的情况下自动迁移时找到迁移数据的方法。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多