public static void InsertMultiples <T>(string connectionString, IList <T> entities, bool getLastId = true) where T : new() { var query = new StringBuilder(); entities.ToList().ForEach(entity => { var insertBuilder = new InsertQueryBuilder() .WithFields(EntityFactory.GetFieldsWithValues(entity, true)); query.Append(insertBuilder.Build <T>()); query.Append(";"); }); if (getLastId && KeyAttribute.HasEntityAutoIncremenetalKey <T>()) { query.Append("SELECT LAST_INSERT_ID()"); using var exe = new DataBaseExecuteReader(connectionString, query.ToString()); if (exe.DataReader.Read()) { var keyProperty = KeyAttribute.GetAutoIncrementKeyProperty <T>(); var lastId = (int)exe.DataReader.GetULong(0) - entities.Count(); entities.ToList().ForEach(entity => { keyProperty.SetValue(entity, Convert.ChangeType(++lastId, keyProperty.PropertyType)); }); } } else { DataBaseDataReader.ExecuteNonQuery(connectionString, query.ToString()); } }
public void GenerateSimpleQueryTest() { // Arrange const string queryExpected = "INSERT INTO `books` (`Title`, `Price`) VALUES ('Essential C#', 20.99)"; var fields = new Dictionary <string, object> { { GetColumnNameWithQuotes <Book>(nameof(Book.Title)), "Essential C#" }, { GetColumnNameWithQuotes <Book>(nameof(Book.Price)), 20.99d } }; var insertQueryBuilder = new InsertQueryBuilder() .WithFields(fields); // Act var query = insertQueryBuilder.Build <Book>(); // Assert Assert.AreEqual(queryExpected, query); }