c# - 如何在使用迁移更新数据库期间修复关键字“NOT”附近的错误语法
问题描述
我是软件开发的新手。我目前正在开发 Asp.Net Core API。我已经成功地进行了添加迁移,当我需要更新数据库时问题就开始了。
错误如下
System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'NOT'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.SqlInternalConnection.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, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
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.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_1.<.ctor>b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
ClientConnectionId:9cf19409-67c7-4553-b2f9-5407db27d008
Error Number:156,State:1,Class:15
Incorrect syntax near the keyword 'NOT'.
您的帮助将不胜感激。
解决方案
我在创建数据库的初始迁移中遇到了同样的问题。PMC 控制台抛出“关键字'NOT'附近的语法不正确。”错误。调试几分钟后,我在 .HasColumnType("varchar(3"); 属性中找到了一个字段。似乎在迁移过程中,自动生成的迁移文件中丢失了一个括号 - 看起来像这样“HasColumnType("varchar (3") 相反,它应该看起来像这样 HasColumnType("varchar(3)") 。
我在“/Migrations/..ModelSnapshot.cs”中找到了这个,在“Up”和“Down”方法中。和“/Migrations/..20190613110239_InitialCreate”
在这两个地方添加括号后,Update-Database 命令按预期工作。
我希望它会有所帮助!快乐编码。
推荐阅读
- discord.py - 如何将消息变成字符串
- google-cloud-platform - Terraform - 重用现有子网在 GCP 上创建云 sql 实例
- html - HTML 问题:我不明白我做错了什么
- customization - Hybris 后台操作验证成功和错误消息
- javascript - ReactPlayer 中的 seekTo() 不适用于 YouTube 链接
- android - Android 应用程序未连接到部署在本地环境的实时服务器上的 Web API,其工作正常
- dart - 如何在 pub 包中正确使用 dart ffi?
- navigation - Gatsby + Kontent - 导航和面包屑
- java - 在注释中使用枚举常量的最终字段作为常量
- linux - 如何使用 sed 命令替换主机名和 ip 地址