asp.net Microsoft.EntityFrameworkCore.DbContext.SaveChanges()-保存实体更改时出错,有关详细信息,请参见内部异常

iq0todco  于 2023-07-01  发布在  .NET
关注(0)|答案(1)|浏览(445)

我的.NET控制台应用程序遇到了一个严重的问题。
应用程序解析JSON并使用解析后的数据填充Model的属性。这部分工作。然而,另一部分,它需要将其插入数据库-不工作。
这就是错误:

  1. An error occurred while saving the entity changes. See the inner exception for details.
  2. at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)
  3. at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
  4. at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList`1 entries)
  5. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
  6. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(StateManager stateManager, Boolean acceptAllChangesOnSuccess)
  7. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.<>c.<SaveChanges>b__104_0(DbContext _, ValueTuple`2 t)
  8. at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
  9. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
  10. at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
  11. at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()

据我所知,它与SaveChanges()有关,但我不知 prop 体是什么。
这是我的代码(一小部分):

  1. public static async Task UpdateDatabase() {
  2. Console.WriteLine("[INFO] Starting Database update...");
  3. using (var _context = new ReleasesDbContext()) {
  4. Console.WriteLine("[WAIT] Database update in progress... Please hold!");
  5. foreach (var release in AllReleases) {
  6. _context.Releases.Add(release);
  7. // Console.WriteLine($"{release.Id}) {release.ReleaseName} ({release.ReleaseId}) - {release.Stage}: {release.RunBy} ({release.StartedDate} - {release.CompletedDate}");
  8. // _context.Add(release);
  9. }
  10. _context.SaveChanges();
  11. // await _context.SaveChangesAsync();
  12. }
  13. Console.WriteLine("[DONE] Successfully applied database update(s)!");
  14. }

那些注解行在那里是因为我在尝试各种不同的东西...
另外,这是我的ReleasesDbContext.cs:

  1. using Microsoft.EntityFrameworkCore;
  2. namespace ReleaseGet {
  3. public class ReleasesDbContext : DbContext {
  4. public DbSet<Release>? Releases { get; set; }
  5. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  6. {
  7. optionsBuilder.UseSqlServer(@"my_connection_string");
  8. }
  9. }
  10. }

另外值得一提的是,我的模型相当标准;我没有什么特别的东西。只有大约20个属性,其中两个是Int,其余的是String。
真的希望有人能帮助我,因为我已经在这个问题上卡住了几个小时。先谢谢你,保重!
更新:我忘了发布完整的例外。这就是:

  1. Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
  2. ---> Microsoft.Data.SqlClient.SqlException (0x80131904): Cannot insert explicit value for identity column in table 'Releases' when IDENTITY_INSERT is set to OFF.
  3. at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
  4. at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
  5. at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
  6. at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
  7. at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
  8. at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()
  9. at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
  10. at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
  11. at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method)
  12. at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
  13. at Microsoft.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior)
  14. at Microsoft.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
  15. at System.Data.Common.DbCommand.ExecuteReader()
  16. at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject)
  17. at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)
  18. ClientConnectionId:4134dbf6-a8cb-485a-9c07-bcaa9a9a1e46
  19. Error Number:544,State:1,Class:16
  20. --- End of inner exception stack trace ---
  21. at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.Execute(IRelationalConnection connection)
  22. at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.Execute(IEnumerable`1 commandBatches, IRelationalConnection connection)
  23. at Microsoft.EntityFrameworkCore.Storage.RelationalDatabase.SaveChanges(IList`1 entries)
  24. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(IList`1 entriesToSave)
  25. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(StateManager stateManager, Boolean acceptAllChangesOnSuccess)
  26. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.<>c.<SaveChanges>b__104_0(DbContext _, ValueTuple`2 t)
  27. at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
  28. at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChanges(Boolean acceptAllChangesOnSuccess)
  29. at Microsoft.EntityFrameworkCore.DbContext.SaveChanges(Boolean acceptAllChangesOnSuccess)
  30. at Microsoft.EntityFrameworkCore.DbContext.SaveChanges()
oknwwptz

oknwwptz1#

解决

添加对象到我的上下文之前,添加了这个之后,插入就可以正常工作了!

  1. _context.ChangeTracker.QueryTrackingBehavior = Microsoft.EntityFrameworkCore.QueryTrackingBehavior.NoTracking;

相关问题