我已经搞砸了我的迁移,我在初始迁移时使用了IgnoreChanges
,但现在我想要删除所有迁移,并开始使用所有逻辑进行初始迁移。
当我删除文件夹中的迁移并尝试Add-Migration
时,它不会生成完整的文件(它是空的 - 因为我自上次以来没有做过任何更改,但现在已删除,迁移)。
是否有 Disable-Migrations 命令,所以我可以重新运行Enable-Migrations
?
答案 0 :(得分:421)
你需要:
__MigrationHistory
表(可能在系统表下);然后在程序包管理器控制台中运行以下命令:
Enable-Migrations -EnableAutomaticMigrations -Force
使用或不使用-EnableAutomaticMigrations
最后,您可以运行:
Add-Migration Initial
答案 1 :(得分:140)
问题:您已经搞砸了迁移,并且想要在不删除现有表格的情况下重置它。
问题:您无法使用数据库中的现有表重置迁移,因为EF希望从头开始创建表。
怎么做:
从Migrations_History表中删除现有迁移。
从迁移文件夹中删除现有迁移。
运行add-migration Reset。这将在您的Migration文件夹中创建一个包含创建表的迁移(但它不会运行它,因此不会出错。)
您现在需要在MigrationHistory表中创建初始行,以便EF具有当前状态的快照。如果您应用迁移,EF将执行此操作。但是,由于数据库中已存在表,因此无法应用刚刚进行的迁移。因此,请进入迁移并注释掉“Up”方法中的所有代码。
现在运行update-database。它将应用迁移(而不是实际更改数据库)并在MigrationHistory中创建快照行。
您现在已经重置了迁移,可能会继续正常迁移。
答案 2 :(得分:27)
怎么样
Update-Database –TargetMigration: $InitialDatabase
包管理器控制台中的?它应该将所有更新重置为其早期状态。
参考链接:Code First Migrations - Migrating to a Specific Version (Including Downgrade)
答案 3 :(得分: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>
// ...
// }
...
}
如果你错过这一点,一切都会失败,你必须重新开始!
Update-Database -verbose
如果您已正确完成上述操作,这应该会成功,现在您可以正常继续。
答案 4 :(得分:2)
我的问题原来是我手动删除了Migrations文件夹。我这样做是因为我想备份内容,所以我只是将文件夹拖出项目。我后来通过将其放回(在制作备份副本之后)修复了问题,然后在解决方案资源管理器中右键单击它并从弹出菜单中选择“删除”来删除“迁移”文件夹。
答案 5 :(得分:2)
在EntityFramework 6中,请尝试:
Add-Migration Initial
以更新初始迁移文件。
答案 6 :(得分:2)
考虑到当我们在.NET Core中搜索EF时,仍然会出现这种情况,我将在此处发布答案(因为它困扰了我很多)。请注意,EF 6 .NET版本有一些微妙之处(无初始命令,您将需要删除“快照”文件)
(在.NET Core 2.1中测试)
以下是步骤:
_efmigrationhistory
表。ApplicationDbContextSnapshot.cs
,并删除。Add-Migration InitialMigration
请注意: 您必须删除所有快照文件。我花了无数小时才删除数据库...如果您不这样做,将会生成一个空迁移。
此外,在#3中,您可以根据需要命名迁移。
以下是一些其他资源: asp.net CORE Migrations generated empty
答案 7 :(得分:2)
删除 Migrations
文件夹,依次 Clean
,然后 Rebuild
>项目。这对我有用。在进行清理和重建之前,它说迁移已经存在,因为它已经存在于其缓存的内存中,尚未被删除。
答案 8 :(得分:1)
在EF6中
Add-Migration Initial
。答案 9 :(得分:1)
在Entity Framework Core中。
dotnet ef数据库drop -f -v
dotnet ef迁移添加初始
dotnet ef数据库更新
答案 10 :(得分:1)
UPDATE 2020
Add-Migration Initial -Context ApplicationDbContext
ApplicationDbContext =>您的上下文。
答案 11 :(得分:0)
此方法不需要删除__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()
{
}
}
答案 12 :(得分:0)
在Net Core 3.0中:
我无法找到重置迁移的方法。
我还遇到了迁移中断的问题,这里提供的答案对我不起作用。我有一个.Net Core 3.0 Web API,在上个月的某个地方,我直接编辑了数据库。是的,我做了一件坏事,一件坏事。
此处建议的策略在Package Manager控制台中导致了许多错误:
当然,我可能错过了一步或错过了清除正确的文件的操作,但是我发现有一些方法可以在没有太多暴力的情况下进行清理:
现在,当使用空数据库启动Web API时,它将正确创建所有表和属性以匹配实体模型。
HTH!
答案 13 :(得分:-2)
Enable-Migrations -EnableAutomaticMigrations -Force