【问题标题】:EF 5 - Code first migrations optimizationEF 5 - 代码优先迁移优化
【发布时间】:2014-06-07 14:52:37
【问题描述】:

我首先使用实体​​框架 5 代码并启用迁移。我对我的模型类做了很多更改,现在我有太多的迁移类,因为每次更改后我都更新了数据库。 现在我想合并我的所有更新以获得一个“初始类”或 2,这样如果我必须再次创建我的数据库,我就可以只运行一次 update-database 命令。 没有代码(太重)是否可能,例如使用命令? 谢谢。

【问题讨论】:

    标签: asp.net-mvc-3 ef-code-first entity-framework-5 entity-framework-migrations


    【解决方案1】:

    解决方案取决于您是否要将现有数据保留在数据库中(如果您有生产数据库,这绝对是必须的)还是可以简单地删除您的数据库。

    我。可以删除当前数据库

    首先您需要删除所有迁移步骤并删除当前数据库,然后运行命令

        add-migration Initial
    

    这样您将只有一个迁移步骤,而不是很多。

    二。必须保留数据

    首先创建当前数据库的备份(在您的解决方案中设置为默认数据库),然后删除该数据库,这样当您运行 add-migration 命令时,实体框架会认为尚未应用任何迁移。

    之后执行第一部分中描述的步骤,然后您将只有一个名为 Initial 的迁移步骤。之后运行

    update-database
    

    命令将创建一个与您当前模型匹配的数据库,但在 __MigrationHistory 表中只有一行。保存 __MigrationHistory 表中的这一行。

    现在您可以恢复刚刚备份的数据库,删除 __MigrationHistory 表中的所有行并插入您之前保存的那一行。在此之后,实体框架将正确地认为数据库和您的模型是最新的,并且这只能通过初始运行迁移步骤来实现,这样您就可以保留所有数据。

    当然,要对多个数据库执行此操作,您只需执行一次这些步骤,对于其他数据库,您只需删除 __MigrationHistory 表中的当前行并为初始迁移步骤插入新行。

    【讨论】:

    • 感谢您的回答,但我不明白最后一部分。如果我删除当前数据库,我如何使用新数据库的 __MigrationHistory 表?
    • 编辑了我的帖子,使其更加详细,现在它包含所有步骤,而不仅仅是关于做什么的草稿。
    • 不客气,如果您使用此答案解决了问题,则将其标记为正确答案;)
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多