示例#1
0
 public void InsertOrReplace_Into_Table_Values_Value1()
 {
     using (var query = new InsertOrReplace().Into.Table("Table").Values.Value("Value1"))
     {
         Assert.That(query.ToSql(), Is.EqualTo("INSERT OR REPLACE INTO Table VALUES (@val_0)"));
         Assert.That(query, Has.Property("Parameters").One.EqualTo(new KeyValuePair <string, object>("@val_0", "Value1")));
     }
 }
示例#2
0
        public void BatchInsert(Tag tag, IEnumerable <Image> images, DbConnection conn = null)
        {
            bool isTransaction = conn != null;

            try
            {
                if (!isTransaction)
                {
                    conn = GetConnection();
                }

                using (var command = conn.CreateCommand())
                {
                    using (var query = new InsertOrReplace().Into.Table(new Table <ImageTag>().Name)
                                       .Columns("ImageID", "TagID")
                                       .Values.Rows(images.Select(i => new object[] { i.ID, tag.ID })))
                    {
                        string sql = query.ToSql();
                        command.CommandText = sql;
                        command.CommandType = CommandType.Text;
                        query.SetParameters(command);

                        s_logger.Debug(sql);
                        int count = command.ExecuteNonQuery();
                        s_logger.Debug($"Processed {count} records.");
                    }
                }
            }
            finally
            {
                if (!isTransaction)
                {
                    conn.Dispose();
                }
            }
        }
示例#3
0
        public void InsertOrReplace(E entity, IDbConnection conn = null)
        {
            InitializeColumnDefinitions();
            try
            {
                VerifyColumnDefinitions(conn);
            }
            catch (NotMatchColumnException e)
            {
                throw new DatabaseSchemaException($"Didn't insert because mismatch definition of table:{TableName}", e);
            }

            ConnectionInternal(new Action <IDbConnection>((connection) =>
            {
                using (var command = connection.CreateCommand())
                {
                    var overrideColumns = SwapIfOverrided(Columns);

                    using (var query = new InsertOrReplace().Into.Table(new Table <E>().Name)
                                       .Columns(overrideColumns.Select(c => c.ColumnName))
                                       .Values.Row(overrideColumns.Select(c => c.PropInfo.GetValue(entity))))
                    {
                        string sql          = query.ToSql();
                        command.CommandText = sql;
                        query.SetParameters(command);

                        s_logger.Debug($"{sql} {query.GetParameters().ToStringKeyIsValue()}");
                        int inserted = command.ExecuteNonQuery();
                        if (inserted == 0)
                        {
                            throw new NoEntityInsertedException($"Failed:{sql} {query.GetParameters().ToStringKeyIsValue()}");
                        }
                    }
                }
            }), conn);
        }