Update-Database 命令在 ASP.Net Core / Entity Framework Core 中不起作用,因为数据库中的对象已经存在

新手上路,请多包涵

我正在通过命令行更新我的数据库,但后来我手动更新了我的一张表。

这似乎破坏了我更新数据库的能力。当我尝试更新时收到以下错误:

  System.Data.SqlClient.SqlException: There is already an object named 'ClientsAndTestimonials' in the database.    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite)
    at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite, String methodName)
    at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
    at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, String executeMethod, IReadOnlyDictionary`2 parameterValues, Boolean openConnection, Boolean closeConnection)
    at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues, Boolean manageConnection)
    at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
    at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
    at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
    at Microsoft.EntityFrameworkCore.Tools.Cli.DatabaseUpdateCommand.<>c__DisplayClass0_0.<Configure>b__0()
    at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
    at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args)
 ClientConnectionId:d89989a8-ce8b-4167-be7e-fcddc4bcdf98
 Error Number:2714,State:6,Class:16
 There is already an object named 'ClientsAndTestimonials' in the database.

在过去的几天里,我一直在尝试解决这个问题。大多数开发人员建议使用 Add-migration “Reset” -IgnoreChanges 的一些变体,例如来自以下 链接 的 John Salewski。

但是,我不断收到一条错误消息,提示“找不到与参数名称 ‘IgnoreChanges’ 匹配的参数”。

任何建议将不胜感激!

原文由 Kelsey Steele 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 695
2 个回答

目前在 EF Core 中没有 -IgnoreChanges(请参阅 此处),但您可以通过注释掉 Up() 方法中的所有代码并应用迁移来实现等效。这将拍摄当前模型状态的快照,以便后续迁移仅包括从该点开始的更改。

因此,如果您只是进行了一些增量模型更改并且您没有此初始基准,您可能需要删除这些更改,应用基准迁移,然后添加您的更改并添加第二次迁移。

原文由 Steve Greene 发布,翻译遵循 CC BY-SA 4.0 许可协议

为此:

  1. 注释掉初始迁移文件的所有 Up() 方法
  2. 运行应用程序
  3. 然后在 EFMigrationsHistory 的数据库中是生成的第一个条目
  4. 我将 Up() 方法改回原来的
  5. 再次运行应用程序,错误消失了

在本地和服务器上为我工作。

原文由 maerlyn 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进