0

我一直在现有数据库上以代码优先的方法开发我的应用程序。

只有现在我才需要运行迁移。当我的模型发生变化时,我不想破坏这个数据库,因为它非常大并且里面有很好的示例数据。

如果框架没有告诉我有待应用的更改,我如何运行迁移?(无论如何,当我从 Rails 迁移时,代码都会运行——但我想从这里开始)

我不想设置自动迁移,因为我正在处理一个包含大量种子数据的大型数据库,我不想删除/重新创建这些数据。我还想控制制作、删除的内容和时间。

当我将它投入生产时,这也是需要的,我想通过迁移而不是手动推出更改。如何通过添加/删除我想要的字段而不让 EF 关心我在做什么来进行迁移?

如果我知道它是如何知道它在哪一个上的(比如 Rails),我可以欺骗她认为她可以运行我想要的迁移吗?

我认为通过以下方式设置初始化程序:

Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>

会占用一英亩,但事实并非如此。

4

2 回答 2

1

要回答标题中的问题,因为有一个 sys 表__MigrationHistory告诉 EF,您的表与数据库的表存在差异。

至于怎么做(从包管理器控制台):

  • Enable-Migrations
    • 在配置类集中AutomaticMigrations = false;
    • 设置你的Database.SetInitializer<Context>(null)所以它不会 DropCreate 或 Update
  • AddMigration <name>将任何挂起的更改排队到更改模型
  • Update-Database将调用该MigrationName.Up方法来更改任何更改的数据库(不丢失数据)。
于 2013-07-26T18:23:05.027 回答
1

EF 使用表“__MigrationHistory”来存储迁移名称/顺序。您可以在开发环境中备份此表,然后删除这些记录。当您部署到生产环境时,您将运行迁移。另一种选择是使用数据库比较 (dev/prod) 并获取脚本来更改您的表/数据。

于 2013-07-26T18:23:22.423 回答