public void BulkOperationsHelpers_BuildInsertIntoSet_BuildsCorrectSequenceForMultipleColumns() { var columns = GetTestColumns(); const string tableName = "TableName"; const string expected = "INSERT INTO TableName ([Email], [IsCool], [Name], [Town]) "; // Act var result = BulkOperationsHelper.BuildInsertIntoSet(columns, "id", tableName); // Assert Assert.Equal(expected, result); }
public void BulkOperationsHelpers_BuildInsertIntoSet_BuildsCorrectSequenceForSingleColumn() { // Arrange var columns = new HashSet <string> { "Id" }; const string tableName = "TableName"; const string expected = "INSERT INTO TableName ([Id]) "; // Act var result = BulkOperationsHelper.BuildInsertIntoSet(columns, null, tableName); // Assert Assert.Equal(expected, result); }
public void BulkOperationsHelpers_BuildInsertIntoSet_BuildsCorrectSequenceForMultipleColumns() { var columns = GetTestColumns(); var tableName = "TableName"; var expected = "INSERT INTO TableName ([Name], [Town], [Email], [IsCool]) "; var sut = new BulkOperationsHelper(); // Act var result = sut.BuildInsertIntoSet(columns, "id", tableName); // Assert Assert.AreEqual(result, expected); }
public void BulkOperationsHelpers_BuildInsertIntoSet_BuildsCorrectSequenceForSingleColumn() { // Arrange var columns = new HashSet <string>(); columns.Add("Id"); var tableName = "TableName"; var expected = "INSERT INTO TableName ([Id]) "; // Act var result = BulkOperationsHelper.BuildInsertIntoSet(columns, null, tableName); // Assert Assert.AreEqual(result, expected); }
/// <summary> /// Commits a transaction to database asynchronously. A valid setup must exist for the operation to be /// successful. /// </summary> /// <param name="connection"></param> /// <returns></returns> /// <exception cref="IdentityException"></exception> public async Task <int> CommitAsync(SqlConnection connection) { int affectedRows = 0; if (_singleEntity == null) { return(affectedRows); } if (connection.State != ConnectionState.Open) { await connection.OpenAsync(); } try { BulkOperationsHelper.AddSqlParamsForQuery(_propertyInfoList, _sqlParams, _columns, _singleEntity, _identityColumn, _outputIdentity, _customColumnMappings); BulkOperationsHelper.DoColumnMappings(_customColumnMappings, _columns); SqlCommand command = connection.CreateCommand(); command.Connection = connection; string fullQualifiedTableName = BulkOperationsHelper.GetFullQualifyingTableName(connection.Database, _schema, _tableName); StringBuilder sb = new StringBuilder(); sb.Append($"{BulkOperationsHelper.BuildInsertIntoSet(_columns, _identityColumn, fullQualifiedTableName)} " + $"VALUES{BulkOperationsHelper.BuildValueSet(_columns, _identityColumn)} "); if (_outputIdentity == ColumnDirectionType.InputOutput) { sb.Append($"SET @{_identityColumn}=SCOPE_IDENTITY();"); } command.CommandText = sb.ToString(); if (_sqlParams.Count > 0) { command.Parameters.AddRange(_sqlParams.ToArray()); } affectedRows = await command.ExecuteNonQueryAsync(); if (_outputIdentity == ColumnDirectionType.InputOutput) { foreach (var x in _sqlParams) { if (x.Direction == ParameterDirection.InputOutput && x.ParameterName == $"@{_identityColumn}") { PropertyInfo propertyInfo = _singleEntity.GetType().GetProperty(_identityColumn); propertyInfo.SetValue(_singleEntity, x.Value); break; } } } return(affectedRows); } catch (SqlException e) { for (int i = 0; i < e.Errors.Count; i++) { // Error 8102 and 544 is identity error. if (e.Errors[i].Number == 544 || e.Errors[i].Number == 8102) { // Expensive but neccessary to inform user of an important configuration setup. throw new IdentityException(e.Errors[i].Message); } } throw; } }