我一直在现有的数据库上以代码优先的方式开发我的应用程序。
现在我只需要运行迁移。我的模型发生变化时,我不想销毁这个数据库,因为它非常大,并且里面有很好的样本数据。
如果没有框架告诉我有待应用的待更改,我该如何运行迁移? (无论如何,当我从Rails进行迁移时代码运行 - 我想从这里进行迁移)
我不想设置自动迁移,因为我正在处理一个包含大量我不想删除/重新创建的种子数据的大型数据库。我也想控制制作,删除和何时。
当我将它投入生产时,我也需要这样做,我想通过Migration而不是手动推出更改。我如何通过添加/删除我想要的字段进行迁移,而不是EF关心我的目标呢?
如果我知道它是如何知道它在哪一个(如Rails),我可以诱使她认为她可以运行我想要的迁移吗?
我认为通过以下方式设置初始化程序:
Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>
会占用它,但事实并非如此。
答案 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)并获取脚本来更改表/数据。