Example #1
0
        public void CompileBatch_compiles_deletes()
        {
            var stateEntry = CreateStateEntry(EntityState.Deleted);

            var command = new ModificationCommand("T1", new ParameterNameGenerator());

            command.AddStateEntry(stateEntry);

            var batch = new ModificationCommandBatch(new[] { command });

            Assert.Equal(
                "BatchHeader$" + Environment.NewLine +
                "DELETE FROM [T1] WHERE [Col1] = @p0$" + Environment.NewLine,
                batch.CompileBatch(new ConcreteSqlGenerator()));
        }
Example #2
0
        public void CompileBatch_compiles_updates()
        {
            var stateEntry = CreateStateEntry(EntityState.Modified, ValueGenerationStrategy.StoreIdentity);

            var command = new ModificationCommand("T1", new ParameterNameGenerator());

            command.AddStateEntry(stateEntry);

            var batch = new ModificationCommandBatch(new[] { command });

            Assert.Equal(
                "BatchHeader$" + Environment.NewLine +
                "UPDATE [T1] SET [Col2] = @p1 WHERE [Col1] = @p0$" + Environment.NewLine,
                batch.CompileBatch(new ConcreteSqlGenerator()));
        }
Example #3
0
        public void CompileBatch_compiles_inserts()
        {
            var stateEntry = CreateStateEntry(EntityState.Added);

            var command = new ModificationCommand("T1", new ParameterNameGenerator());

            command.AddStateEntry(stateEntry);

            var batch = new ModificationCommandBatch(new[] { command });

            Assert.Equal(
                "BatchHeader$" + Environment.NewLine +
                "INSERT INTO [T1] ([Col1], [Col2]) VALUES (@p0, @p1)$" + Environment.NewLine,
                batch.CompileBatch(new ConcreteSqlGenerator()));
        }
        public async void Exception_thrown_if_no_rows_returned_for_command_with_store_generated_values()
        {
            var stateEntry = CreateStateEntry(EntityState.Added, ValueGenerationOnSave.WhenInserting);
            var command    = new ModificationCommand("T1", new ParameterNameGenerator());

            command.AddStateEntry(stateEntry);

            var batch      = new ModificationCommandBatch(new[] { command });
            var mockReader = SetupMockDataReader(new[] { "Col1" });
            var connection = SetupMockConnection(mockReader.Object);

            var executor = new BatchExecutor(new Mock <SqlGenerator> {
                CallBase = true
            }.Object, connection, new RelationalTypeMapper());

            Assert.Equal(Strings.FormatUpdateConcurrencyException(1, 0),
                         (await Assert.ThrowsAsync <DbUpdateConcurrencyException>(
                              async() => await executor.ExecuteAsync(new[] { batch }))).Message);
        }
        public async void ExecuteAsync_executes_batch_commands_and_consumes_reader()
        {
            var stateEntry = CreateStateEntry(EntityState.Added);
            var command    = new ModificationCommand("T1", new ParameterNameGenerator());

            command.AddStateEntry(stateEntry);

            var batch      = new ModificationCommandBatch(new[] { command });
            var mockReader = SetupMockDataReader();
            var connection = SetupMockConnection(mockReader.Object);

            var executor = new BatchExecutor(new Mock <SqlGenerator> {
                CallBase = true
            }.Object, connection, new RelationalTypeMapper());

            await executor.ExecuteAsync(new[] { batch });

            mockReader.Verify(r => r.ReadAsync(It.IsAny <CancellationToken>()), Times.Once);
            mockReader.Verify(r => r.NextResultAsync(It.IsAny <CancellationToken>()), Times.Once);
        }
        public async void ExecuteAsync_saves_store_generated_values()
        {
            var stateEntry = CreateStateEntry(EntityState.Added, ValueGenerationOnSave.WhenInserting);
            var command    = new ModificationCommand("T1", new ParameterNameGenerator());

            command.AddStateEntry(stateEntry);

            var batch      = new ModificationCommandBatch(new[] { command });
            var mockReader = SetupMockDataReader(new[] { "Col1" }, new List <object[]> {
                new object[] { 42 }
            });
            var connection = SetupMockConnection(mockReader.Object);

            var executor = new BatchExecutor(new Mock <SqlGenerator> {
                CallBase = true
            }.Object, connection, new RelationalTypeMapper());

            await executor.ExecuteAsync(new[] { batch });

            Assert.Equal(42, stateEntry[stateEntry.EntityType.GetProperty("Col1")]);
            Assert.Equal("Test", stateEntry[stateEntry.EntityType.GetProperty("Col2")]);
        }
        public async void Exception_thrown_for_more_than_one_row_returned_for_single_command()
        {
            var stateEntry = CreateStateEntry(EntityState.Added, ValueGenerationOnSave.WhenInserting);
            var command    = new ModificationCommand("T1", new ParameterNameGenerator());

            command.AddStateEntry(stateEntry);

            var batch      = new ModificationCommandBatch(new[] { command });
            var mockReader = SetupMockDataReader(new[] { "Col1" }, new List <object[]>
            {
                new object[] { 42 },
                new object[] { 43 }
            });
            var connection = SetupMockConnection(mockReader.Object);

            var executor = new BatchExecutor(new Mock <SqlGenerator> {
                CallBase = true
            }.Object, connection, new RelationalTypeMapper());

            Assert.Equal(Strings.TooManyRowsForModificationCommand,
                         (await Assert.ThrowsAsync <DbUpdateException>(
                              async() => await executor.ExecuteAsync(new[] { batch }))).Message);
        }