【发布时间】:2015-06-27 02:56:27
【问题描述】:
据this blog post 称,大多数使用 EF 迁移的公司应该不会使用 EF 迁移更新生产数据库的数据库架构。相反,博客文章的作者建议在部署过程中使用 Schema 更新脚本。
我已经使用 Schema 更新脚本几年了,虽然它们可以工作,但我计划在未来使用 EF 迁移,原因如下:
- 更快的部署,更少的停机时间
- 更简单的部署过程
- 现有数据的迁移比使用 T-SQL 更容易
- 等待应用更改的更易于理解的语法(具有简洁 C# 语法的 DbMigration 类与传统环境中笨拙的 T-SQL 迁移脚本)。
- 如果新软件版本的部署失败,可以轻松快速地降级到旧数据库架构
我认为禁止使用 EF 迁移生产数据库的一个原因是,如果数据库架构仅由 DBA 而非开发人员更改。但是,我既是 DBA 又是开发人员,所以这对我来说无关紧要。
那么,使用 EF 更新生产数据库有哪些风险?
编辑:我想补充一点,正如 solomon8718 已经建议的那样,我总是将生产数据库的新副本拉到我的登台服务器上,并在将它们应用于生产之前测试要在登台服务器上应用的 EF 迁移服务器。 IMO 这对于生产系统的任何模式更新都是必不可少的,无论我是否使用 EF 迁移。
【问题讨论】:
-
@Ewan:除非您使用自动迁移(我不是),否则您会得到与生成的 DbMigration 类的一部分非常相似的 T-SQL 模式迁移脚本。您可以详细查看每个更改。 IMO 也比 T-SQL 更容易检查有效性,因为它比 SQL 语法更容易理解。
-
Mason:我不想在这里宣传任何意见,我想问一些我可能错过的观点,因为我不明白我链接到的博客文章在说什么。看起来,在你之前为我的帖子点赞的 7 个人也同意这是一个有趣的话题,尤其是那些甚至给它加星标的四个人。
-
@AdrianGrigore,我可以看到你来自哪里,但我认为这个问题的措辞应该不同。 “有什么好的理由”听起来确实像是一个主观问题。也很难回答;我认为您永远无法明确回答“不”,但“是的,这里有一些原因……”可能会使用取决于特定风险策略的主观原因。更好的提问方式可能是“使用 EF 更新生产数据库有哪些风险?”为了记录,我也对答案感兴趣。
-
撤回我的近距离投票,因为它似乎符合帮助中心中包含的the information,在某些情况下允许提出主观问题。
-
我在生产中不使用 Code First / Migrations 的主要原因是您的用户需要 sa 权限。这在很多环境中显然是一个很大的安全风险。如果您对此感到满意或乐于暂时授予这些权限,那为什么不呢?
标签: c# entity-framework database-schema entity-framework-migrations