我已经搞砸了我的迁移,我IgnoreChanges
在初始迁移中使用过,但是现在我想删除我的所有迁移并从具有所有逻辑的初始迁移开始。
当我删除文件夹中的迁移并尝试Add-Migration
它并没有生成完整文件时(它是空的 - 因为自上次迁移以来我没有进行任何更改,但现在已删除)。
是否有任何禁用迁移命令,所以我可以重新运行Enable-Migrations
?
我已经搞砸了我的迁移,我IgnoreChanges
在初始迁移中使用过,但是现在我想删除我的所有迁移并从具有所有逻辑的初始迁移开始。
当我删除文件夹中的迁移并尝试Add-Migration
它并没有生成完整文件时(它是空的 - 因为自上次迁移以来我没有进行任何更改,但现在已删除)。
是否有任何禁用迁移命令,所以我可以重新运行Enable-Migrations
?
你需要 :
__MigrationHistory
数据库中的表(可能在系统表下);然后在包管理器控制台中运行以下命令:
Enable-Migrations -EnableAutomaticMigrations -Force
有或没有使用-EnableAutomaticMigrations
最后,您可以运行:
Add-Migration Initial
问题:你搞砸了你的迁移,你想在不删除现有表的情况下重置它。
问题:您无法使用数据库中的现有表重置迁移,因为 EF 想要从头开始创建表。
该怎么办:
从 Migrations_History 表中删除现有迁移。
从迁移文件夹中删除现有迁移。
运行添加迁移重置。这将在您的 Migration 文件夹中创建一个迁移,其中包括创建表(但它不会运行它,因此不会出错。)
您现在需要在 MigrationHistory 表中创建初始行,以便 EF 拥有当前状态的快照。如果您应用迁移,EF 将执行此操作。但是,您不能应用刚刚进行的迁移,因为数据库中已经存在表。所以进入迁移并注释掉“Up”方法中的所有代码。
现在运行更新数据库。它将应用迁移(而不是实际更改数据库)并在 MigrationHistory 中创建快照行。
您现在已重置迁移,可以继续进行正常迁移。
怎么样
Update-Database –TargetMigration: $InitialDatabase
在包管理器控制台中?它应该将所有更新重置为其早期状态。
要解决此问题,您需要:
删除迁移文件夹中的所有 *.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
如果您正确地完成了上述操作,这应该是成功的,现在您可以正常进行了。
在实体框架核心中。
从迁移文件夹中删除所有文件。
输入控制台
dotnet ef database drop -f -v
dotnet ef migrations add Initial
dotnet ef database update
(或用于包管理器控制台)
Drop-Database -Force -Verbose
Add-Migration Initial
Update-Database
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
删除Migrations
文件夹,然后Clean
删除Rebuild
项目。这对我有用。在清理和重建之前,它说迁移已经存在,因为在它的缓存内存中,它还没有被删除。
在 EntityFramework 6 请尝试:
Add-Migration Initial
为了更新初始迁移文件。
我的问题原来是我手动删除了 Migrations 文件夹。我这样做是因为我想备份内容,所以我只是将文件夹拖出项目。我后来通过将其放回(在制作备份副本后)解决了这个问题,然后通过在解决方案资源管理器中右键单击它并从弹出菜单中选择删除来删除迁移文件夹。
此方法不需要删除__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()
{
}
}
在 EF6 中
Add-Migration Initial
。2020 年更新 => 重置实体框架迁移
Add-Migration Initial -Context ApplicationDbContext
ApplicationDbContext => 你的上下文。
但是,如果您只需要更新存在的身份模式,请尝试: https ://stackoverflow.com/a/59966100/4654957
在 Net Core 3.0 中:
我无法找到重置迁移的方法。
我也遇到了迁移失败的问题,这里提供的答案对我不起作用。我有一个 .Net Core 3.0 Web API,在上个月的某个地方,我直接编辑了数据库。是的,我做了一件坏事,坏事。
此处建议的策略导致包管理器控制台中出现许多错误:
诚然,我可能错过了一个步骤或错过了清除正确的文件,但我发现有一些方法可以在没有太多蛮力的情况下清理它:
现在,当 Web API 以空数据库启动时,它会正确创建所有表和属性以匹配实体模型。
!
VSC(Visual Studio 代码)——.Net Core
1.删除状态:删除你项目中的migrations文件夹;
2.删除数据库中__MigrationHistory的记录;
3.dotnet ef database drop -v
那么您确定要删除服务器 '.' 上的数据库 '<your-database' 吗?(y/N) 写“N”
4.dotnet ef migrations add Initial 然后将20211014110429_initial
类的代码写入__MigrationHistory的
Enable-Migrations -EnableAutomaticMigrations -Force