public void BatchCommands_works_with_incomplete_updates_for_shared_table_no_leaf_dependent(EntityState state) { var currentDbContext = CreateContextServices(CreateSharedTableModel()).GetRequiredService <ICurrentDbContext>(); var stateManager = currentDbContext.GetDependencies().StateManager; var first = new FakeEntity { Id = 42 }; var firstEntry = stateManager.GetOrCreateEntry(first); firstEntry.SetEntityState(state); var second = new DerivedRelatedFakeEntity { Id = 42 }; var secondEntry = stateManager.GetOrCreateEntry(second); secondEntry.SetEntityState(state); var modelData = new UpdateAdapter(stateManager); var batches = CreateBatches(new[] { firstEntry, secondEntry }, modelData, sensitiveLogging: false); Assert.Single(batches); }
public void BatchCommands_works_with_incomplete_updates_for_shared_table_no_leaf_dependent(EntityState state) { var currentDbContext = CreateContextServices(CreateSharedTableModel()).GetRequiredService <ICurrentDbContext>(); var stateManager = currentDbContext.GetDependencies().StateManager; var first = new FakeEntity { Id = 42 }; var firstEntry = stateManager.GetOrCreateEntry(first); firstEntry.SetEntityState(state); var second = new DerivedRelatedFakeEntity { Id = 42 }; var secondEntry = stateManager.GetOrCreateEntry(second); secondEntry.SetEntityState(state); var batches = CreateCommandBatchPreparer(stateManager: stateManager, sensitiveLogging: false) .BatchCommands(new[] { firstEntry, secondEntry }).ToArray(); Assert.Equal(1, batches.Length); }
public void BatchCommands_throws_on_incomplete_updates_for_shared_table_no_principal(EntityState state, bool sensitiveLogging) { var currentDbContext = CreateContextServices(CreateSharedTableModel()).GetRequiredService <ICurrentDbContext>(); var stateManager = currentDbContext.GetDependencies().StateManager; var first = new DerivedRelatedFakeEntity { Id = 42 }; var firstEntry = stateManager.GetOrCreateEntry(first); firstEntry.SetEntityState(state); var second = new AnotherFakeEntity { Id = 42 }; var secondEntry = stateManager.GetOrCreateEntry(second); secondEntry.SetEntityState(state); var modelData = new UpdateAdapter(stateManager); if (sensitiveLogging) { Assert.Equal( RelationalStrings.SharedRowEntryCountMismatchSensitive( nameof(DerivedRelatedFakeEntity), nameof(FakeEntity), nameof(FakeEntity), "{Id: 42}", state), Assert.Throws <InvalidOperationException>( () => CreateCommandBatchPreparer(updateAdapter: modelData, sensitiveLogging: true) .BatchCommands(new[] { firstEntry }, modelData).ToArray()).Message); } else { Assert.Equal( RelationalStrings.SharedRowEntryCountMismatch( nameof(DerivedRelatedFakeEntity), nameof(FakeEntity), nameof(FakeEntity), state), Assert.Throws <InvalidOperationException>( () => CreateCommandBatchPreparer(updateAdapter: modelData, sensitiveLogging: false) .BatchCommands(new[] { firstEntry, secondEntry }, modelData).ToArray()).Message); } }
public void BatchCommands_creates_batch_on_incomplete_updates_for_shared_table_no_principal(EntityState state) { var currentDbContext = CreateContextServices(CreateSharedTableModel()).GetRequiredService <ICurrentDbContext>(); var stateManager = currentDbContext.GetDependencies().StateManager; var first = new DerivedRelatedFakeEntity { Id = 42 }; var firstEntry = stateManager.GetOrCreateEntry(first); firstEntry.SetEntityState(state); var second = new AnotherFakeEntity { Id = 42 }; var secondEntry = stateManager.GetOrCreateEntry(second); secondEntry.SetEntityState(state); var modelData = new UpdateAdapter(stateManager); var commandBatches = CreateBatches(new[] { firstEntry }, modelData, sensitiveLogging: true); if (state == EntityState.Deleted) { // Detect indirect update dependencies. Issue #17947. Assert.Throws <SingleException>( () => Assert.Single(commandBatches)); } else { Assert.Single(commandBatches); Assert.Equal(1, commandBatches.First().ModificationCommands.Count); var command = commandBatches.First().ModificationCommands.Single(); Assert.Equal(EntityState.Modified, command.EntityState); // Detect indirect update dependencies. Issue #17947. Assert.Equal( "4", Assert.Throws <EqualException>( () => Assert.Equal(5, command.ColumnModifications.Count)).Actual); } // var columnMod = command.ColumnModifications[0]; // // Assert.Equal(nameof(DerivedRelatedFakeEntity.Id), columnMod.ColumnName); // Assert.True(columnMod.UseOriginalValueParameter); // Assert.False(columnMod.UseCurrentValueParameter); // Assert.Equal(first.Id, columnMod.OriginalValue); // Assert.True(columnMod.IsCondition); // Assert.True(columnMod.IsKey); // Assert.False(columnMod.IsRead); // Assert.False(columnMod.IsWrite); // // columnMod = command.ColumnModifications[1]; // // Assert.Equal("Discriminator", columnMod.ColumnName); // Assert.Equal(nameof(DerivedRelatedFakeEntity), columnMod.Value); // Assert.Equal(nameof(DerivedRelatedFakeEntity), columnMod.OriginalValue); // Assert.True(columnMod.IsCondition); // Assert.False(columnMod.IsKey); // Assert.False(columnMod.IsRead); // Assert.True(columnMod.IsWrite); // // columnMod = command.ColumnModifications[2]; // // Assert.Equal(nameof(DerivedRelatedFakeEntity.RelatedId), columnMod.ColumnName); // Assert.Equal(first.RelatedId, columnMod.Value); // Assert.Equal(first.RelatedId, columnMod.OriginalValue); // Assert.True(columnMod.IsCondition); // Assert.False(columnMod.IsKey); // Assert.False(columnMod.IsRead); // Assert.True(columnMod.IsWrite); // // columnMod = command.ColumnModifications[3]; // // Assert.Equal(nameof(AnotherFakeEntity.AnotherId), columnMod.ColumnName); // Assert.Equal(second.AnotherId, columnMod.Value); // Assert.Equal(second.AnotherId, columnMod.OriginalValue); // Assert.False(columnMod.IsCondition); // Assert.False(columnMod.IsKey); // Assert.False(columnMod.IsRead); // Assert.True(columnMod.IsWrite); }