我们为什么要在EntityFramework中禁用自动迁移

时间:2017-10-20 10:07:28

标签: c# database entity-framework

我被告知,为EntityFramework启用自动迁移主要是在生产中是一个坏主意。

  1. 我们真的要禁用它们吗?
  2. 我们是否必须为所有环境(开发,发布,生产)禁用它们?
  3. 您能描述替代自动的替代部署过程吗? 迁移?
  4. 由于 丹尼尔

2 个答案:

答案 0 :(得分:3)

从Oracle SQL的角度来看,某些更改不一定是开箱即用的,因此在创建迁移代码时,需要进行一些手动调整。

请考虑以下事项:

将所需列添加到现有表中。为了保留现有数据,我修改了生成的迁移,创建了一个可为空的列,分配了一个初始值,然后将该列编辑为不可为空。

还有许多其他事情,自动迁移可能会产生一些(意外的)副作用,我怀疑Oracle数据提供程序会更糟,但MS SQL会出现一些问题。

在团队开发中,如果多个开发人员更改数据库模型,则可能会引起冲突的迁移。

答案 1 :(得分:1)

这不是一个坏主意或好主意,但更实际的做法是manual migration与实体框架。

为什么:

  • 速度问题:EF将尝试检测模型是否与数据库不同,如果是真的则构建它。
  • 在数据库上抑制数据:您错误地抑制了模型或dbset,它会破坏DataBase中的表/数据。在生产环境中不太建议使用AutomaticMigrationDataLossAllowed。换句话说,如果将其设置为false,则会抛出异常并导致可访问性问题。 (AutomaticMigrationDataLossAllowed on MSDN
关于实体框架迁移的

Another good doc

AutoMigration的主要用途是Code First,它允许开发人员生成比构建DataBase更多的“代码”。只需创建模型并运行它将构建Db,销毁您从模型中抑制的内容或修改列。