Tod*_*odd 287 entity-framework database-migration ef-migrations
我已经搞砸了我的迁移,我用于IgnoreChanges初始迁移,但现在我想要删除所有迁移,并开始使用所有逻辑进行初始迁移.
当我删除文件夹中的迁移并尝试Add-Migration它并不生成一个完整的文件(它是空的 - 因为我上次没有做任何更改,但现在已删除,迁移).
是否有任何Disable-Migrations命令,所以我可以重新运行Enable-Migrations?
Tod*_*odd 430
你需要 :
__MigrationHistory数据库中的表(可能在系统表下); 然后在程序包管理器控制台中运行以下命令:
Enable-Migrations -EnableAutomaticMigrations -Force
Run Code Online (Sandbox Code Playgroud)
使用或不使用 -EnableAutomaticMigrations
最后,你可以运行:
Add-Migration Initial
Run Code Online (Sandbox Code Playgroud)Gre*_*Gum 143
问题:您已经搞砸了迁移,并且想要在不删除现有表的情况下重置它.
问题:由于EF希望从头开始创建表,因此无法使用数据库中的现有表重置迁移.
该怎么办:
从Migrations_History表中删除现有迁移.
从"迁移"文件夹中删除现有迁移.
运行add-migration Reset.这将在您的Migration文件夹中创建一个包含创建表的迁移(但它不会运行它,因此不会出错.)
您现在需要在MigrationHistory表中创建初始行,以便EF具有当前状态的快照.如果您应用迁移,EF将执行此操作.但是,由于数据库中已存在表,因此无法应用刚刚进行的迁移.所以进入迁移并注释掉"Up"方法中的所有代码.
现在运行update-database.它将应用迁移(而不是实际更改数据库)并在MigrationHistory中创建快照行.
您现在已重置迁移,并可能继续正常迁移.
Chr*_*oon 29
怎么样
Update-Database –TargetMigration: $InitialDatabase
Run Code Online (Sandbox Code Playgroud)
在包管理器控制台?它应该将所有更新重置为其早期状态.
Rus*_*ail 16
要解决此问题,您需要:
删除迁移文件夹中的所有*.cs文件.
删除数据库中的_MigrationHistory表
跑 Enable-Migrations -EnableAutomaticMigrations -Force
跑 Add-Migration Reset
然后,在public partial class Reset : DbMigration类中,您需要注释所有现有和当前表:
public override void Up()
{
// CreateTable(
// "dbo.<EXISTING TABLE NAME IN DATABASE>
// ...
// }
...
}
Run Code Online (Sandbox Code Playgroud)
如果你错过这一点,一切都会失败,你必须重新开始!
Update-Database -verbose如果您已正确完成上述操作,这应该会成功,现在您可以正常继续.
Lia*_*han 12
在实体框架核心中。
从迁移文件夹中删除所有文件。
在控制台输入
dotnet ef database drop -f -v
dotnet ef migrations add Initial
dotnet ef database update
Run Code Online (Sandbox Code Playgroud)
(或用于包管理器控制台)
Drop-Database -Force -Verbose
Add-Migration Initial
Update-Database
Run Code Online (Sandbox Code Playgroud)
UPD:仅当您不关心当前的持久数据时才这样做。如果你这样做,请使用 Greg Gum 的回答
考虑到当我们在 .NET Core 中搜索 EF 时仍然会出现这种情况,我将在这里发布我的答案(因为它一直困扰着我)。请注意,EF 6 .NET 版本有一些微妙之处(没有初始命令,您需要删除“快照”文件)
(在 .NET Core 2.1 中测试)
以下是步骤:
_efmigrationhistory表。ApplicationDbContextSnapshot.cs,然后将其删除。Add-Migration InitialMigration请注意: 您必须删除所有快照文件。我花了无数个小时来删除数据库......如果你不这样做,这将产生一个空的迁移。
此外,在 #3 中,您可以随意命名您的迁移。
下面是一些额外的资源: asp.net CORE Migrations generated empty
对于 EFCore 6/7:
要将一段时间内的所有更改合并回单个文件,并将其应用到现有数据库,同时保留所有数据(即在生产中和其他开发人员中),这些步骤对我有用:
Migrations从项目文件夹中删除现有迁移。ApplicationDbContextSnapshot.cs, DatabaseContextModelSnapshot.cs或类似的。Add-Migration Initial。(可以按照您喜欢的方式命名,而不是Initial)。这将在您的迁移文件夹中创建一个迁移,其中包括创建表,但尚未应用。comment out all the code inside the "Up" method,以便它不会对所有现有表进行任何更改。(这使我们能够以正确的格式更新数据库,而无需在下一步中进行任何更改)migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]");以在迁移期间应用删除/截断public partial class Initial : Migration
{
public override void Up()
{
migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]");
/*
OTHER COMMENTED OUT CODE
*/
}
public override void Down()
{
}
}
Run Code Online (Sandbox Code Playgroud)
Update-Database。它将应用迁移并删除现有的迁移跟踪条目(而不实际更改数据库模式)并在中创建快照行__EFMigrationsHistory__EFMigrationsHistory)migrationBuilder.Sql("DELETE FROM [dbo].[__EFMigrationsHistory]");并取消注释第 5 步中的所有代码,然后提交回源代码管理。(这样新的开发人员可以从头开始创建数据库。如果有人忘记更新现有数据库,则会出错并抱怨表已经存在,因此他们只需注释掉初始文件并应用即可。)删除文件Migrations夹,Clean然后Rebuild删除项目。这对我有用。在清理和重建之前,它说迁移已经存在,因为在其缓存内存中,它尚未删除。
| 归档时间: |
|
| 查看次数: |
180405 次 |
| 最近记录: |