我已经IgnoreChanges
对初始迁移进行了重新整理,但是现在我想删除所有迁移,并从所有逻辑开始进行初始迁移。
当我删除文件夹中的迁移并尝试并Add-Migration
不会生成完整文件时(它是空的-因为自上次迁移以来,我没有进行任何更改,但是现在删除了该迁移)。
是否有任何Disable-Migrations命令,所以我可以重新运行Enable-Migrations
?
我已经IgnoreChanges
对初始迁移进行了重新整理,但是现在我想删除所有迁移,并从所有逻辑开始进行初始迁移。
当我删除文件夹中的迁移并尝试并Add-Migration
不会生成完整文件时(它是空的-因为自上次迁移以来,我没有进行任何更改,但是现在删除了该迁移)。
是否有任何Disable-Migrations命令,所以我可以重新运行Enable-Migrations
?
Answers:
你需要 :
__MigrationHistory
数据库中的表(可能在系统表下);然后在程序包管理器控制台中运行以下命令:
Enable-Migrations -EnableAutomaticMigrations -Force
搭配或不搭配使用 -EnableAutomaticMigrations
最后,您可以运行:
Add-Migration Initial
问题:您已经对迁移进行了重新设计,并且希望在不删除现有表的情况下进行重置。
问题:由于EF希望从头开始创建表,因此无法使用数据库中的现有表重置迁移。
该怎么办:
从Migrations_History表中删除现有的迁移。
从“迁移”文件夹中删除现有的迁移。
运行添加迁移重置。这将在包含创建表的“迁移”文件夹中创建一个迁移(但是不会运行它,因此不会出错)。
现在,您需要在MigrationHistory表中创建初始行,以便EF拥有当前状态的快照。如果您应用迁移,EF将执行此操作。但是,由于表已经存在于数据库中,因此您无法应用刚刚进行的迁移。因此,进入“迁移”并注释掉“ Up”方法中的所有代码。
现在运行update-database。它将应用迁移(而不实际更改数据库)并在MigrationHistory中创建快照行。
现在,您已经重置了迁移,并且可以继续进行正常迁移。
怎么样
Update-Database –TargetMigration: $InitialDatabase
在Package Manager控制台中?它应该将所有更新重置为非常早的状态。
参考链接:代码优先迁移-迁移到特定版本(包括降级)
要解决此问题,您需要:
删除“迁移”文件夹中的所有* .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>
// ...
// }
...
}
如果错过这一点,所有操作都会失败,您必须重新开始!
Update-Database -verbose
如果您已正确完成上述操作,则应该成功,现在您可以正常进行了。
考虑到当我们在.NET Core中搜索EF时仍然会出现这种情况,我将在此处发布答案(因为它困扰了我很多)。请注意,EF 6 .NET版本有一些微妙之处(无初始命令,您将需要删除“快照”文件)
(在.NET Core 2.1中测试)
步骤如下:
_efmigrationhistory
表。ApplicationDbContextSnapshot.cs
,然后将其删除。Add-Migration InitialMigration
请注意: 您必须删除所有快照文件。我花了无数个小时只是删除数据库...如果您不这样做,将会生成一个空迁移。
另外,在#3中,您可以根据需要命名迁移。
这里是一些其他资源: asp.net CORE迁移生成为空
在实体框架核心中。
dotnet ef数据库drop -f -v
dotnet ef迁移添加了Initial
dotnet ef数据库更新
此方法不需要删除__MigrationHistory
表,因此您不必将手放在部署的数据库上。
Add-Migration ResetMigrations
Up()
方法中的迁移历史记录:/// <summary>
/// Reset existing migrations by cleaning the __MigrationHistory table
/// and creating a new initial migration with the current model snapshot.
/// </summary>
public partial class ResetMigrations : DbMigration
{
public override void Up()
{
Sql("DELETE FROM [dbo].[__MigrationHistory]");
}
public override void Down()
{
}
}
在Net Core 3.0中:
我找不到重新设置迁移的方法。
我还遇到了迁移中断的问题,这里提供的答案对我不起作用。我有一个.Net Core 3.0 Web API,在上个月的某个地方,我直接编辑了数据库。是的,我做了一件坏事,一件坏事。
此处建议的策略在Package Manager控制台中导致许多错误:
当然,我可能错过了一步或错过了清除正确的文件的过程,但是我发现有一些方法可以在没有太多暴力的情况下进行清理:
现在,当使用空数据库启动Web API时,它将正确创建所有表和属性以匹配实体模型。
HTH!
2020年更新
Add-Migration Initial -Context ApplicationDbContext
ApplicationDbContext =>您的上下文。
Enable-Migrations -EnableAutomaticMigrations -Force