Skip to content

Assertion failure when saving entity without setting primitive required collection property #31513

@roji

Description

@roji

Against release/8.0-rc1 (011f0ec).

Repro:

await using var ctx = new BlogContext();
await ctx.Database.EnsureDeletedAsync();
await ctx.Database.EnsureCreatedAsync();

ctx.Blogs.Add(new Blog { Name = "foo" });
await ctx.SaveChangesAsync();

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder
            .UseSqlServer(@"Server=localhost;Database=test;User=SA;Password=Abcd5678;Connect Timeout=60;ConnectRetryCount=0;Encrypt=false")
            .LogTo(Console.WriteLine, LogLevel.Information)
            .EnableSensitiveDataLogging();
}

public class Blog
{
    public int Id { get; set; }
    public string? Name { get; set; }
    public int[] Ints { get; set; }
}

Error:

fail: 8/20/2023 09:38:53.337 CoreEventId.SaveChangesFailed[10000] (Microsoft.EntityFrameworkCore.Update) 
      An exception occurred in the database while saving changes for context type 'BlogContext'.
      Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
       ---> System.Diagnostics.UnreachableException: Check.DebugAssert failed: Null value in a non-nullable input parameter
         at Microsoft.EntityFrameworkCore.Utilities.Check.DebugAssert(Boolean condition, String message) in /home/roji/projects/efcore/src/Shared/Check.cs:line 115
         at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping.CreateParameter(DbCommand command, String name, Object value, Nullable`1 nullable, ParameterDirection direction) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/RelationalTypeMapping.cs:line 596
         at Microsoft.EntityFrameworkCore.Storage.Internal.TypeMappedRelationalParameter.AddDbParameter(DbCommand command, Object value) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/Internal/TypeMappedRelationalParameter.cs:line 65
         at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBase.AddDbParameter(DbCommand command, IReadOnlyDictionary`2 parameterValues) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/Internal/RelationalParameterBase.cs:line 51
         at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/RelationalCommand.cs:line 821
         at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/RelationalCommand.cs:line 638
         at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/ReaderModificationCommandBatch.cs:line 383
         --- End of inner exception stack trace ---
         at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/ReaderModificationCommandBatch.cs:line 398
         at Microsoft.EntityFrameworkCore.SqlServer.Update.Internal.SqlServerModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.SqlServer/Update/Internal/SqlServerModificationCommandBatch.cs:line 240
         at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/Internal/BatchExecutor.cs:line 206
         at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/Internal/BatchExecutor.cs:line 230
         at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/Internal/BatchExecutor.cs:line 257
         at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(IList`1 entriesToSave, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore/ChangeTracking/Internal/StateManager.cs:line 1328
         at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(StateManager stateManager, Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore/ChangeTracking/Internal/StateManager.cs:line 1427
         at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.SqlServer/Storage/Internal/SqlServerExecutionStrategy.cs:line 79
         at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore/DbContext.cs:line 773
Unhandled exception. Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while saving the entity changes. See the inner exception for details.
 ---> System.Diagnostics.UnreachableException: Check.DebugAssert failed: Null value in a non-nullable input parameter
   at Microsoft.EntityFrameworkCore.Utilities.Check.DebugAssert(Boolean condition, String message) in /home/roji/projects/efcore/src/Shared/Check.cs:line 115
   at Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping.CreateParameter(DbCommand command, String name, Object value, Nullable`1 nullable, ParameterDirection direction) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/RelationalTypeMapping.cs:line 596
   at Microsoft.EntityFrameworkCore.Storage.Internal.TypeMappedRelationalParameter.AddDbParameter(DbCommand command, Object value) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/Internal/TypeMappedRelationalParameter.cs:line 65
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBase.AddDbParameter(DbCommand command, IReadOnlyDictionary`2 parameterValues) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/Internal/RelationalParameterBase.cs:line 51
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.CreateDbCommand(RelationalCommandParameterObject parameterObject, Guid commandId, DbCommandMethod commandMethod) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/RelationalCommand.cs:line 821
   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Storage/RelationalCommand.cs:line 638
   at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/ReaderModificationCommandBatch.cs:line 383
   --- End of inner exception stack trace ---
   at Microsoft.EntityFrameworkCore.Update.ReaderModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/ReaderModificationCommandBatch.cs:line 398
   at Microsoft.EntityFrameworkCore.SqlServer.Update.Internal.SqlServerModificationCommandBatch.ExecuteAsync(IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.SqlServer/Update/Internal/SqlServerModificationCommandBatch.cs:line 240
   at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/Internal/BatchExecutor.cs:line 206
   at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/Internal/BatchExecutor.cs:line 230
   at Microsoft.EntityFrameworkCore.Update.Internal.BatchExecutor.ExecuteAsync(IEnumerable`1 commandBatches, IRelationalConnection connection, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.Relational/Update/Internal/BatchExecutor.cs:line 257
   at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(IList`1 entriesToSave, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore/ChangeTracking/Internal/StateManager.cs:line 1328
   at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.SaveChangesAsync(StateManager stateManager, Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore/ChangeTracking/Internal/StateManager.cs:line 1427
   at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func`4 operation, Func`4 verifySucceeded, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore.SqlServer/Storage/Internal/SqlServerExecutionStrategy.cs:line 79
   at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore/DbContext.cs:line 773
   at Microsoft.EntityFrameworkCore.DbContext.SaveChangesAsync(Boolean acceptAllChangesOnSuccess, CancellationToken cancellationToken) in /home/roji/projects/efcore/src/EFCore/DbContext.cs:line 808
   at Program.<Main>$(String[] args) in /home/roji/projects/test/Program.cs:line 17
   at Program.<Main>$(String[] args) in /home/roji/projects/test/Program.cs:line 17
   at Program.<Main>(String[] args)

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions