EF Migrations - 数据库中已经存在一个名称为''的对象

3

我在向数据库添加新表时遇到了困难。这是我尝试添加新迁移时输入的命令:

Add-Migration AdminSett

脚手架迁移“AdminSett”。此迁移文件的设计师代码包括当前 Code First 模型的快照。在下一次搭建迁移时,将使用此快照来计算模型的更改。如果您对模型进行了其他更改,并希望将其包含在此迁移中,则可以再次运行“Add-Migration AdminSett”以重新生成它。
Update-Database AdminSett

指定“-Verbose”标志以查看应用于目标数据库的SQL语句。正在应用显式迁移:[201607011035464_AdminSett]。正在应用显式迁移:201607011035464_AdminSett。System.Data.SqlClient.SqlException (0x80131904):数据库中已经存在名为“AdminSettings”的对象。在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) 中出现错误。在 System.Data.Entity.Migrations.DbMigrator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) 中出现错误。在 System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(MigrationStatement migrationStatement, DbConnection connection, DbTransaction transaction, DbInterceptionContext interceptionContext) 中出现错误。在 System.Data.Entity.Migrations.DbMigrator.ExecuteStatementsInternal(IEnumerable`1 migrationStatements, DbConnection connection) 中出现错误。在 System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration) 中出现错误。在 System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId) 中出现错误。在 System.Data.Entity.Migrations.DbMigrator.UpdateInternal(String targetMigration) 中出现错误。在 System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) 中出现错误。在 System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run() 中出现错误。客户端连接ID: dec63212-4546-48a9-bf8e-9e2b8548fcf3。错误编号: 2714,状态: 6,类: 16。数据库中已经存在名为“AdminSettings”的对象。

在数据库的_Migrations表中,没有名为AdminSett的迁移行


看起来你已经有了一个 AdminSettings 表...那么,AdminSettings 表是怎么已经出现在数据库中的呢? - spender
数据库中只有一个名为AdminSettings的表,这是我刚刚创建的,所以我不确定为什么它会说这个。 - Cathal O 'Donnell
你是手工创建的吗?使用 SQL 语句? - spender
是的,我创建了表格,创建了类,然后创建了 DBset,执行了迁移,但是现在我遇到了这个错误。 - Cathal O 'Donnell
6
但是迁移是创建表格的方法,它通过查看您的数据模型并将其与_migrations表中的数据进行比较来推导出应该这样做,而不是根据您数据库的实际模式。如果您手动创建了表格,则现在有一个模式与_migrations中的数据不同的模式... 因此迁移将失败。要么使用迁移进行所有模式修改,要么什么都不做。如果您一直在与数据库捣鼓,EF就无法猜测该怎么做。 - spender
2个回答

0

在尝试弄清楚为什么我的在线 Azure 数据库不接受我的更新命令并抱怨同样的问题时,我偶然发现了这个问题。

检查 _EFMigrationHistory 表后,我发现在线数据库缺少已经发生在在线数据库中的几个迁移的条目(不确定这是为什么,可能是我上传了 datapac 到数据库,但没有包括 _EFMigrationHistory 表?)。

无论如何,我通过将所有相关的迁移从本地复制到在线数据库中来解决了这个问题,以便 EF 知道它应该从哪个迁移开始运行。


-1

数据库中有一张名为Admin Setting的表,你需要手动从数据库中删除它,然后运行update-database命令更新数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接