На нашем предприятии имеется такое свойство:
public DateTime Date { get; init; }
Затем мы переименовали его в:
public DateTime DateUTC { get; init; }
В методе Up(MigrationBuilder migrationBuilder) мы имеем:
migrationBuilder.RenameColumn(
name: "Date",
table: "VirtualAccountStatus",
newName: "DateUTC");
Миграция не запускается и выдает следующее исключение:
Применение миграции «20220422111129_Rename_VirtualAccountDateField». Не удалось выполнить DbCommand (67 мс) [Parameters=[], CommandType='Text', CommandTimeout='30'] EXEC sp_rename N'[VirtualAccountStatus].[''Date'']', N'DateUTC', N'COLUMN' ; Microsoft.Data.SqlClient.SqlException (0x80131904): либо параметр @objname неоднозначен, либо заявленный @objtype (COLUMN) неверен.
at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) in /_/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlConnection.cs:line 2010
at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) in /_/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlInternalConnection.cs:line 770
at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) in /_/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs:line 1421
at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) in /_/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs:line 2637
at Microsoft.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean isAsync, Int32 timeout, Boolean asyncWrite) in /_/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlCommand.cs:line 3502
at Microsoft.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String methodName) in /_/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlCommand.cs:line 1667
at Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery() in /_/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlCommand.cs:line 1213
Я думаю, это потому, что EF Core 7 не нравится тот факт, что у нас есть столбец с именем Date (может быть, зарезервированное ключевое слово?)
Как я могу преодолеть это, чтобы переименовать поле и сделать миграцию счастливой?
Что будет, если попробовать migrationBuilder.RenameColumn(name: "[Date]", table: "VirtualAccountStatus", newName: "DateUTC")?
DateUTC звучит так, будто это какое-то зарезервированное имя. Пробовали ли вы временно переименовать его во что-то определенно уникальное, чтобы исключить это?





В качестве обходного пути можно изменить миграцию на:
migrationBuilder.Sql("EXEC sp_rename N'[VirtualAccountStatus].[Date]', N'DateUTC', N'COLUMN';");
Попробуйте исправить этот SQL
sp_rename N'[VirtualAccountStatus].[''Date'']', N'DateUTC', N'COLUMN';и перенести его как необработанный SQL.