2017-10-20 57 views
2

我被告知启用EntityFramework的自动迁移主要是在生产环境中是一个坏主意。为什么要禁用EntityFramework中的自动迁移

  1. 我们真的必须禁用它们吗?
  2. 我们是否必须禁用它们以适应所有环境(开发,发布,制作)?
  3. 您能否介绍替代部署过程以取代自动迁移 ?

感谢 丹尼尔

+0

“我被告知” - 你为什么不要求那个人进行辩论? – Evk

+0

我问他,但我不服气。所以这就是为什么我问这个问题。你能为我的问题提供一个答案吗? –

+0

它是一个非常开放的问题,这里可能是各种因素,它可能不适合。其中一个因素是部署你是否有持续部署的应用程序? –

回答

2

从Oracle SQL的角度谈到,有一些并不一定工作开箱即用一定的变化,所以在创建迁移代码时,需要进行一些手动调整。

请考虑以下事项:

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

自动化迁移可能会有一些(意外的)副作用,并且我怀疑Oracle数据提供者的情况会更糟,但是MS SQL会出现一些问题。

在团队开发中,如果多位开发人员更改数据库模型,则冲突迁移可能会成为问题。

1

这不是一个坏主意,但更好的做法是用Entity Framework做manual migration

为什么:

  • 速度问题:EF会尝试侦测模式是从不同的数据库,并建立它,如果它是真实的。
  • 抑制DB上的数据:你错误地抑制了模型或dbset,它会破坏DataBase中的表/数据。在生产环境中不推荐使用AutomaticMigrationDataLossAllowed。换句话说,如果你将它设置为false,它会抛出Exception并且可能导致可访问性问题。 (AutomaticMigrationDataLossAllowed on MSDN

Another good doc约实体框架迁移

主要使用自动迁移的是代码首先,这是允许的developper产生更多的“代码”比建立数据库。只需创建模型并运行它即可构建Db,从模型或修改列中摧毁您抑制的内容。

+0

感谢您的回答,真的很有帮助。我有一个问题,但。我正在观看有关EF代码第一次迁移的Julie Lerman复数课程,她建议将迁移导出到生产环境的脚本中,但她没有解释原因。你怎么看待这件事? –

+0

不知道这门课程,但我认为她喜欢用sql脚本更新数据库,并且没有实体框架迁移系统。 – EchoZulu

相关问题