Exemple #1
0
    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);
            }
        }
Exemple #4
0
    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);
    }