예제 #1
0
        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());
            }
        }
예제 #2
0
        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);
        }