EF Migration对象已存在错误

时间:2016-06-30 16:18:04

标签: c# asp.net-mvc entity-framework ef-code-first

我正在开发一个带有Entity Framework的ASP.NET MVC项目,其代码首先来自数据库。我得到了数据库中每个表的模型。我在模型中进行了一些更改,启用了迁移,当我初始化迁移时出现错误:

  

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

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

如何进行初始迁移应用模型上的更改而不是从头开始创建表?

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

5 个答案:

答案 0 :(得分:18)

尝试运行

Add-Migration InitialCreate –IgnoreChanges 
程序包管理器控制台中的

命令。这将创建一个空迁移,将当前模型作为快照。然后运行

Update-Database 
程序包管理器控制台中的

命令。这将将InitialCreate迁移应用于数据库。由于实际迁移不包含任何更改,因此只需在__MigrationsHistory表中添加一行,表示已应用此迁移。

请参阅this

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

另一种方法是简单地在上下方法中注释所有代码

答案 1 :(得分:2)

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

答案 2 :(得分:1)

Amr Alaa解决方案有效,但数据库没有迁移到最新型号。

以下是它的工作原理(使用自动迁移):

  1. 删除迁移文件夹
  2. 执行enable-migrations
  3. 在新创建的Configuration.cs中将这两个属性设置为true

    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
    
  4. 执行Update-Database -Force

  5. 您的数据库将更新为最新方案并准备就绪。

    希望这会有所帮助。

答案 3 :(得分:1)

当您删除以前的迁移并且新的迁移尝试创建已经存在的新表时,将出现此错误。恢复以前的迁移,一切都会好起来。

答案 4 :(得分:1)

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

context.Database.EnsureCreated()

请注意,该方法不会应用任何迁移 (source)(您可以通过对数据库进行sql查询来进行检查,就像“从__EfMigrationHistory中选择*”一样,并确保该数据库上没有任何迁移。

EF提供了一种非常好的方法来帮助实现这一目标

context.Database.Migrate()

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

希望有帮助