将实体框架与现有数据库和空开发数据库一起使用时的迁移

时间:2014-09-22 12:50:04

标签: .net entity-framework ef-migrations

我们有一些现有的应用程序,我们将实体框架改造为ORM。

目标是首先使用代码(来自现有数据库)进行迁移,但我们在迁移以适应现有数据库方案时遇到问题:

  • 一个test / prod数据库,它已经包含了与代码匹配的所有表。虽然没有迁移表。
  • 一个空的localhost开发数据库。

目标

  1. 开发人员可以运行单元测试项目,数据库将与所有表一起创建自己。
  2. 可以从迁移生成脚本,该脚本将负责生成__migrationsHistory表以及生产所需的所有更改。
  3. 使用package-manager可以使用默认迁移初始化程序解决1。或者使用ignore-changes开关解决2。但是两者同时工作都没有成功。

    我试过了:

    • 添加迁移InitialCreate; add-migration MigrationHistoryTable -ignore-changes;
      开发人员可以做的想法是:update-database
      进入test / prod时,可以使用update-database -Script -SourceMigration生成脚本:$ InitialDatabase。问题是脚本会发现initialCreate迁移丢失并尝试重新添加现有表。如果丢失迁移历史记录表(它位于test / prod中),则从MigrationHistoryTable进行的源迁移不会添加迁移历史记录表。
    • 另一个尝试是有两个迁移项目,一个用于单元测试,另一个用于数据库。这变得有点乱。

    还有其他建议吗?

    THX 金

1 个答案:

答案 0 :(得分:1)

您可以使用实体框架电源工具extensions将现有数据库反向工程为代码。在没有数据库的开发机器上执行

add-migration Initial

update-database

您将获得模型匹配生产。编写__MigrationHistory表和所有行的脚本,并将它们添加到生产数据库中。然后,您的生产数据库将为从迁移生成的未来脚本做好准备。

命令

 update-database -script -SourceMigration $InitialDatabase

将生成一个完整的脚本,用于将数据库更新到最新版本。它检查__MigrationHistory表并逐行应用架构更改以使模型与每次迁移中的更改匹配。