Entity Framework 错误地引用了已删除的列

Entity Framework incorrectly referencing deleted Column

在我的数据库和 EF EDmX 模型中有一个名为 ROWID 的列。 我不再需要该列,所以我 从 table 中删除了该列(包括它使用的约束和索引)。

然后我删除了整个 EDMX 模型并从头开始重新创建。 现在,当我更新此 Table 中的一行时,它会抛出一个异常

{"Invalid column name 'ROWID'.\r\nInvalid column name 'ROWID'."}

使用dbContext.SaveChanges()方法时出现错误

以下是堆栈跟踪:

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.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource'1 completion, Int32 timeout, Task& task, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource'1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary'2 identifierValues, List`1 generatedValues) at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)

所以我认为问题是由于数据库中存在触发器造成的。所以 EF 实际上并没有保存,但它触发了这个保存,其中 ROWID 列仍然被引用 (再次这个触发器和列是由 Entity Framework 在将数据从 Oracle DB 迁移到 SQL 服务器。在这个自动创建的触发器中,唯一标识符被设置为默认值而不是 NEWID()).

因此,如果您遇到任何类似的问题,您应该检查您正在修改的 table 上是否有任何触发器