gpt4 book ai didi

.net - 如何完全重置所有 Entity Framework 6 迁移历史? (僵尸迁移!)

转载 作者:行者123 更新时间:2023-12-04 12:19:52 24 4
gpt4 key购买 nike

短版:

在删除整个数据库(包括 __MigrationHistory)和解决方案中的所有迁移之后......不知何故,在某处找到了命名迁移并由 DbMigrator 应用!他们来自哪里???

长版:

我们使用 Entity Framework 6,针对 SQL Server 2012。它是一个 MVC webapp,我们使用基于代码的迁移,我们在这一点上有相当长的迁移历史。我们在启动时运行迁移:

public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...

var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
migrator.Update();
}
}

在多台 PC 上运行良好,但只有一台 新品 PC,我有一些问题,它似乎在某种程度上不同步。每当应用程序运行时,它都会提示有待处理的更改。
System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException occurred
HResult=-2146233088
Message=Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
Source=EntityFramework
StackTrace:
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration)
at System.Data.Entity.Migrations.DbMigrator.<>c__DisplayClassc.<Update>b__b()
at System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase)
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update()
at CVInsights.MvcApplication.Application_Start() in c:\Work\ClearVision\CVO\CVInsights\Global.asax.cs:line 20
InnerException:

但是运行 add-migration 没有显示任何变化,而 update-database 什么也不做。

因此,暂时放弃,我想完全“重置”EF 迁移。所以我删除了整个数据库(显然包括 __MigrationHistory 表)。我从 IDE Migrations 文件夹中删除了所有迁移。

现在……当我在这台新 PC 上启动我们的应用程序时……DbMigrator 仍然会从某个地方找到并应用一堆命名迁移!这不是我们目前拥有的完整列表(在我们的源代码管理中),但它是几周前某个时间点的列表。在应用了这些“僵尸迁移”中的一些之后,它抛出了同样的旧异常“

他们到底是从哪里来的??

我觉得我一定是在做一些非常愚蠢的事情,或者 PC 从根本上搞砸了......

配置.cs:
public sealed class Configuration : DbMigrationsConfiguration<CloudDatabase.DAL.DatabaseContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}

protected override void Seed(CloudDatabase.DAL.DatabaseContext context)
{

context.Roles.AddOrUpdate(role => role.ID, // This is the primary key or the table we are adding to or updating.
new Role() { ID = 1, Name = "A role" },
new Role() { ID = 2, Name = "another role" },
new Role() { ID = 3, Name = "third role" }
);
}
}

最佳答案

根据评论链和您似乎已经尝试过的内容,我建议采取以下行动。请注意,我假设您有某种形式的代码存储(如果没有,请备份您的代码)。

  • 删除有问题的数据库。
  • 关闭 Visual Studio 的所有副本。
  • 从您的解决方案文件夹中删除源(所有这些,不要留下任何东西)。
  • 从您的代码存储(Pull、Get 等)中提取代码副本
  • 重建解决方案
  • 运行 update-database命令并运行您的项目。

  • 如果这不能修复您的项目,那么我的猜测是 Visual Studio 安装有问题(重新安装,我希望不会)。

    祝你好运。

    关于.net - 如何完全重置所有 Entity Framework 6 迁移历史? (僵尸迁移!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30793230/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com