ASP MVC 4如何知道您正在使用哪个数据库迁移?

时间:2013-07-26 18:13:28

标签: asp.net-mvc asp.net-mvc-4

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

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

如果没有框架告诉我有待应用的待更改,我该如何运行迁移? (无论如何,当我从Rails进行迁移时代码运行 - 我想从这里进行迁移)

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

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

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

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

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

会占用它,但事实并非如此。

2 个答案:

答案 0 :(得分:1)

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

至于如何做(从包管理器控制台):

  • Enable-Migrations
    • 在配置类集AutomaticMigrations = false;
    • 设置Database.SetInitializer<Context>(null),使其不会DropCreate或更新
  • AddMigration <name>将任何挂起的更改排入更改模型
  • Update-Database会调用MigrationName.Up方法来更改数据库中的任何更改(没有丢失数据)。

答案 1 :(得分:1)

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