【问题标题】:Dis-Advantages of using EF 6.x.x Code First without Migration在不迁移的情况下使用 EF 6.x Code First 的缺点
【发布时间】:2016-06-08 06:52:21
【问题描述】:

我厌倦了使用/运行Add-MigrationUpdate-Database,因为很多时候我们忘记在生产数据库上运行迁移。因此,我们决定从数据库表中删除所有迁移以及所有迁移类。那么,如果我的 __MigrationHistory 表始终为空且没有迁移类怎么办。主要缺点是什么?

【问题讨论】:

    标签: entity-framework entity-framework-6


    【解决方案1】:

    不,这是一个坏主意,[__MigrationHistory] ​​用于将您当前使用的概念模型与存储模型进行比较。

    1) 案例:DbMigrationsConfiguration 自动:

    [__MigrationHistory] ​​跟踪上次迁移。

      this.AutomaticMigrationsEnabled = true;
      this.AutomaticMigrationDataLossAllowed = true;
    


    如上图所示,migrationId 是迁移标识符,model 列是当前概念模型二进制流的 base64 表示。

    2) 案例:DbMigrationsConfiguration 非自动:

    [__MigrationHistory] ​​跟踪每次迁移。

      this.AutomaticMigrationsEnabled = false;
      this.AutomaticMigrationDataLossAllowed = false;
    

    每个迁移级别获取一个 migrationId 标识符,用于迁移级别的上/下/下。

    最佳实践:如果您想使用自动迁移,只需重新生成迁移并发送给客户。

    如果您使用的是非自动迁移。 1)如果客户需要数据,那么只需使用 SQL 将数据转换为新的数据库模式 2) 如果客户不需要数据,那么只需删除数据库并使用 initialCreate 再次创建它。


    如果您想创建没有任何迁移历史信息的数据库:

            // Create the database. You can generate it from SMO "Script database as" and if the database exist then just ignore the creation
            // Do not forget to remove the [__MigrationHistory] rows.
            DbContext.Database.ExecuteSqlCommand("SQLCreateDbScript.sql");
    
            Database.SetInitializer<MyDbContext>(null);
    
            using (var dbContext = new MyDbContext())
            {
                // Create DbContext and it works!
                dbContext.Users.Add(new User());
                dbContext.SaveChanges();
            }
    

    希望这能帮助你解决问题!

    如果您想要真正使用较少 Db-Schema 的东西,请使用 NoSql 和 EF。 在 Core 版本中仍未完成,但使用旧版本 EF6 可以使用:http://www.brightstardb.com 或使用来自 microsoft https://msdn.microsoft.com/en-us/library/dn271399.aspx 的 Polyglot appoarch 来执行此操作(NoSql Db)

    【讨论】:

    • 来吧,我只是不想像许多其他 ORM 那样进行任何迁移。我们的经理讨厌Db Schema Change Error。我知道这是个坏主意,但我根本不想迁移。它让我们哭泣。我们现在做不到。我们拥有的第二个选项是完全放弃这个 EF。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多