更新Entity Framework中上次迁移的模型快照并重新应用它

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

我正在为现有数据库使用EF6代码优先迁移,但最初的DbContext并不能完全覆盖现有的模式(因为它很庞大)。因此,我不得不以数据库优先的方式对模型进行更新。例如,当我需要一个已经在数据库中但未反映在代码中的表或列的实体映射时,我执行以下操作:

  1. 进行所有更改(添加新实体,重命名列映射或添加新属性)
  2. 代表最新模型快照stub_migration的脚手架迁移
  3. 将最新的序列化模型从stub_migration复制粘贴到last_migration资源文件中
  4. 删除stub_migration
  5. 在数据库中还原last_migration
  6. Update-Database,以便[__MigrationHistory]表中的模型快照也将更新

我知道这种方法有点hackish,正确的方法是留下空的stub_migration,但这会迫使许多空的迁移,我宁愿避免。

MSDN article (Option 2: Update the model snapshot in the last migration)看一个类似的场景,我不会想象有一种更简单的方法,而不是编写power shell脚本,托管代码或两者兼而有之。但在深入研究之前,我宁愿先问社区。所以我想知道:有没有一种简单的方法可以在最新的迁移过程中自动生成新模型快照并重新获得它?

entity-framework powershell automation ef-migrations
2个回答
1
投票

我正在做类似的事情。我有一个大型数据库,我正在使用EF Tools for VS 2013将其小部分逆向工程到我的DEV环境中。该工具在单独的文件夹中创建我的POCO和上下文更改。我将它们移动到我的数据项目,创建一个流畅的配置,然后应用迁移(或打开自动迁移)。

过了一段时间我想为TEST或PROD进行一次迁移,所以我使用这里解释的技术将它们卷成一次迁移:http://cpratt.co/migrating-production-database-with-entity-framework-code-first/#at_pco=smlwn-1.0&at_si=54ad5c7b61c48943&at_ab=per-12&at_pos=0&at_tot=1


1
投票

通过使用Entity Framework重新构建数据库,可以简化更新应用于数据库的上次迁移的DbContext快照的步骤:

  1. 如果应用于数据库,则还原上次迁移:Update-Database -Target:Previous_Migraton
  2. 重新构建最后一次迁移Add-Migration The_name_of_the_last_migration,它将重新创建最后一次迁移* .resx和* .Designer.cs(不是迁移代码),这非常方便。

这两个步骤涵盖原始问题的4个步骤(2-5)。

您还可以通过指定标志-IgnoreChanges和(或)-Force,根据您的需要获得不同的行为

顺便说一句,更新DbContext快照的主要问题不是如何自动执行这些步骤,而是如何有条件地将它们应用于TEST / PROD环境,具体取决于您是否确实要禁止警告,因为您已映射现有数据库你在DbContext中的第一个实体,或者你希望它在构建时失败,以防你创建新实体并忘记为它们创建代码优先迁移。

因此,尝试完全避免这些步骤,并且当您只想将现有表映射到代码时,可能会创建空迁移。

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