迁移对象已经存在错误

本文关键字:存在 错误 对象 迁移 | 更新日期: 2023-09-27 17:53:41

我正在做一个ASP。NET MVC项目与实体框架与代码首先从数据库。我得到了数据库中每个表的模型。我在模型中做了一些更改,启用了迁移,当我初始化迁移时,我得到了一个错误:

数据库中已经存在一个名为"TableName"的对象。"

我尝试了update-database -force,但没有帮助。初始迁移创建已经存在的表!

如何使初始迁移在模型上应用更改,而不是从一开始就创建表?

在这种情况下,在数据库和模型之间同步更改的最佳实践是什么?

迁移对象已经存在错误

尝试运行

Add-Migration InitialCreate –IgnoreChanges 

命令在包管理器控制台中。这将创建一个空的迁移,并将当前模型作为快照。然后运行

Update-Database 

命令在包管理器控制台中。这将把InitialCreate迁移应用到数据库。由于实际的迁移不包含任何更改,它将简单地向__migrationhistory表中添加一行,表明该迁移已经被应用。

看到这个

然后更改您的模型并添加迁移。

另一种方法是简单地在

上注释所有向上和向下方法的代码

对我来说最好的想法是在初始迁移文件的UP和Down函数中注释所有代码,然后触发dotnet ef database update应该可以正常工作,确保在注释初始迁移

之前更新迁移。

如果这些答案都不适合您,您可以检查您的代码中是否使用了

方法
context.Database.EnsureCreated()

请注意,该方法不应用任何迁移(源)(你可以检查这做一个sql查询数据库,像"select * from __EfMigrationHistory",并确保没有迁移在该数据库。

EF提供了一个很好的方法来帮助这个,那就是

context.Database.Migrate()

,它不仅将确保您的拥有数据库,而且还将使用迁移并将数据库迁移到最新版本。

希望有所帮助

当您删除以前的迁移并且您的新迁移尝试创建已经存在的新表时,将出现此错误。

Amr ala解决方案可以工作,但是数据库没有迁移到最新的模型。

它是如何工作的(使用自动迁移):

  1. 删除迁移文件夹
  2. 执行enable-migrations
  3. 在新创建的Configuration.cs

    中将这两个属性设置为true
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
    
  4. Execute Update-Database -Force

您的数据库将更新到最新的方案,并准备好。