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())); }
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())); }
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); }