前几年的EF迁移

问题描述 投票:0回答:2

我过去四年一直在一个项目中工作。目前,我们已经进行了2510次迁移,并且随着系统变得更加复杂并添加了新功能,预计还会继续增加。

进行这种数量的迁移是一种好/不好的做法吗?

我们正在讨论删除所有迁移并创建一个代表整个数据库的新迁移的选项,但是我们不知道这是一个好习惯。有人有做这种东西的经验吗?

c# entity-framework ef-migrations
2个回答
0
投票

如果您可以从头开始重建,那么迁移过多就没有什么不好。在可以正常工作的生产环境中,迁移实际上仅是启动和运行开发机器或回滚不良发行版的一种方法。

但是,我个人喜欢不时地重置迁移。我们有同样的问题,数千次迁移,由于提交时的人为错误,以及名称空间更改(在此处插入原因),它在重建时可能不会很长时间。

实际上,对于生产而言,它永远都不会被重建,它仅适用于开发测试机。

但是存在一些非常不利的方面的风险,如果您在UP中具有自定义代码和脚本来执行各种操作(您可能会这样做),那么您将必须小心并重新添加它们,并且< [备份所有内容 !!!!!!!!

免责声明,除非他们确切知道自己在做什么,否则我不会提倡任何人这样做。进行大量迁移是可以的,并且在任何正常情况下都不会造成问题,但是,破坏生产数据库可能会花费很多。


进一步阅读

如果您想解决这个问题


0
投票
我认为not_collapsing_migrations崩溃的风险。

C-崩溃中的迁移

风险:

    C_R1-结果数据库不是应该的,因为:
    • 创建摘要迁移时,单个迁移的自定义更改会丢失
  • 其他原因
  • [C_R2-部署风险:不重要的部署(包括修改migration_history表)
  • 好处:

      C_B1-重新启动db的代码更快地启动(快多少?)>
    • C_B2-清洁解决方案
    • C_B3-当前迁移包含新数据库版本不建议使用的操作
    • C_B4-(我不建议这样做,请参见下文)如果最初使用较新版本的EF完成,则新版本的EF可能会创建更好的SQL,甚至可能修复错误或突出显示问题。
  • NC-不崩溃的迁移

      NC_R3-迁移达到极限-
    • 影响很大,不太可能,应在PROD之前检测到


  • 无论如何...让我们这样做

    我不推荐这样做,但是如果您决定取消迁移,这里有两种方法可以降低风险C_R1(结果数据库!=当前数据库,因为某些自定义代码“丢失了翻译”)。

    A。使用外部工具创建代表数据库的初始脚本,并使用生成的sql作为第一次新迁移的基础(与仅运行Add-Migration和使用EF附带的代码相反)。

    B。使初始迁移包含所有迁移的代码(而不是仅运行Add-Migration并使用EF附带的代码)。

    © www.soinside.com 2019 - 2024. All rights reserved.