如何清理现有数据库并生成新的迁移?
How to Cleanup & generate fresh migration for existing DB?
我们希望摆脱 100 次迁移 类,因为生产中的数据库模式是最终的。
Here are the steps I followed:
- 删除迁移文件夹。
- 添加迁移 -??
什么命令行开关,能帮到我们吗?
编辑:
If all goes well Up() method of migration should be empty right? For
example following is wrong generation on Add-Migration. Because if we
execute the project we will get duplicate table errors.
public partial class Sanity : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.AccountPreferences",
c => new
{
AccountID = c.Guid(nullable: false),
}
.... for 1000s of tables
}
}
干净的迁移应该是这样的:在尝试 Add-Migration
后续更改时,不应出现任何错误。
Unable to generate an explicit migration because the following
explicit migrations are pending: [201712281054591_Sanity]. Apply the
pending explicit migrations before attempting to generate a new
explicit migration.
如您所见,如果我们碰巧执行 Update-Database
将得到 table 已经存在的错误。
Are we forced to always retains all migration copies?
不知道会持续多久 "final"?
使用:
Add-Migration Initial
删除迁移文件夹后
打开你的数据库。
清除table__MigrationHistory
删除文件夹中的迁移
运行 Add-Migration MigrationName
看看这是否有帮助:
MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"
Entity framework code first - how to run Update-Database for production database
How to delete and recreate from scratch an existing EF Code First database
注:
我凭记忆写这篇文章,如果您有任何问题请告诉我,我会重新检查。
此外,我对此的了解来自 稍旧版本的 EF,因为我最近没有在那里做太多工作,但我怀疑是否有很大变化。
据我所知,如果你想...
a) 保留数据库,
b) 清理你的项目迁移,
c) 有 2 'match',同步:
执行以下操作:
- 删除迁移文件夹(您的项目)
- 运行 Add-Migration Initial
- 然后应该添加一个迁移
- 注意:这是安全的,但在下一步之前做备份,更改连接字符串等
- 运行 Update-Database -Script
- 不更新数据库但创建 SQL 脚本,包括迁移 table
- 找到 INSERT INTO [__MigrationHistory]
记录,只是 运行 那些(在你的数据库上),将它们插入数据库
...然后用 Add-Migration
再次测试,看它是否会产生任何东西,应该不会产生新的迁移,空迁移。
请通读上面的第一个 link 并根据需要调整方法。
我确信可能有更简单、更短的方法来执行此操作(通过 PM 控制台),但目前还不知道。
几乎与接受的相同,但没有编写初始迁移脚本。
- 删除 __MigrationHistory 数据库 table
- 删除迁移文件夹中的所有迁移文件
- 运行
Add-migration Initial
在程序包管理器控制台中
- 注释掉Initial Migration中Up方法里面的代码
- 运行
Update-database
在 PM 控制台中(只是为了创建一个迁移条目)
- 删除初始迁移中的注释
我们希望摆脱 100 次迁移 类,因为生产中的数据库模式是最终的。
Here are the steps I followed:
- 删除迁移文件夹。
- 添加迁移 -??
什么命令行开关,能帮到我们吗?
编辑:
If all goes well Up() method of migration should be empty right? For example following is wrong generation on Add-Migration. Because if we execute the project we will get duplicate table errors.
public partial class Sanity : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.AccountPreferences",
c => new
{
AccountID = c.Guid(nullable: false),
}
.... for 1000s of tables
}
}
干净的迁移应该是这样的:在尝试 Add-Migration
后续更改时,不应出现任何错误。
Unable to generate an explicit migration because the following explicit migrations are pending: [201712281054591_Sanity]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
如您所见,如果我们碰巧执行 Update-Database
将得到 table 已经存在的错误。
Are we forced to always retains all migration copies?
不知道会持续多久 "final"?
使用:
Add-Migration Initial
删除迁移文件夹后
打开你的数据库。
清除table__MigrationHistory
删除文件夹中的迁移
运行 Add-Migration MigrationName
看看这是否有帮助:
MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"
Entity framework code first - how to run Update-Database for production database
How to delete and recreate from scratch an existing EF Code First database
注:
我凭记忆写这篇文章,如果您有任何问题请告诉我,我会重新检查。
此外,我对此的了解来自 稍旧版本的 EF,因为我最近没有在那里做太多工作,但我怀疑是否有很大变化。
据我所知,如果你想...
a) 保留数据库,
b) 清理你的项目迁移,
c) 有 2 'match',同步:
执行以下操作:
- 删除迁移文件夹(您的项目)
- 运行 Add-Migration Initial
- 然后应该添加一个迁移
- 注意:这是安全的,但在下一步之前做备份,更改连接字符串等
- 运行 Update-Database -Script
- 不更新数据库但创建 SQL 脚本,包括迁移 table
- 找到 INSERT INTO [__MigrationHistory]
记录,只是 运行 那些(在你的数据库上),将它们插入数据库
...然后用 Add-Migration
再次测试,看它是否会产生任何东西,应该不会产生新的迁移,空迁移。
请通读上面的第一个 link 并根据需要调整方法。
我确信可能有更简单、更短的方法来执行此操作(通过 PM 控制台),但目前还不知道。
几乎与接受的相同,但没有编写初始迁移脚本。
- 删除 __MigrationHistory 数据库 table
- 删除迁移文件夹中的所有迁移文件
- 运行
Add-migration Initial
在程序包管理器控制台中 - 注释掉Initial Migration中Up方法里面的代码
- 运行
Update-database
在 PM 控制台中(只是为了创建一个迁移条目) - 删除初始迁移中的注释