public int Insert(Sample sample)
        {
            const string sql1 = @"INSERT into sample(ImageType, Name, ImageSizeX, ImageSizeY, Style, ImageURL, BgImage, MainTextNumber, SmallTextNumber, IfHasSmallText, Font)  
                                VALUES(@ImageType, @Name, @ImageSizeX, @ImageSizeY, @Style, @ImageURL, @BgImage, @MainTextNumber, @SmallTextNumber, @IfHasSmallText, @Font); 
                                SELECT LAST_INSERT_ID();";

            const string sql2 = @"INSERT into imagetext(SampleId, Type, Text, Font, PositionX, PositionY, FontSize, FontOrder)  
                                        VALUES(@SampleId, @Type, @Text, @Font, @PositionX, @PositionY, @FontSize, @FontOrder)";

            using (contexto.connection)
            {
                contexto.OpenConnection();
                MySqlTransaction transaction = contexto.connection.BeginTransaction();
                MySqlCommand     cmd         = contexto.connection.CreateCommand();
                cmd.Transaction = transaction;

                try
                {
                    cmd.CommandText = sql1;
                    var parameters = new Dictionary <string, object>
                    {
                        { "ImageType", sample.ImageType },
                        { "Name", sample.Name },
                        { "ImageSizeX", sample.ImageSizeX },
                        { "ImageSizeY", sample.ImageSizeY },
                        { "Style", sample.Style },
                        { "ImageURL", sample.ImageUrl },
                        { "BgImage", sample.BgImage },
                        { "MainTextNumber", sample.MainTextNumber },
                        { "SmallTextNumber", sample.SmallTextNumber },
                        { "IfHasSmallText", sample.IfHasSmallText },
                        { "Font", sample.Font }
                    };
                    contexto.AddParams(cmd, parameters);
                    int sampleId = int.Parse(cmd.ExecuteScalar().ToString());  //insert sample
                    cmd.Parameters.Clear();
                    cmd.CommandText = sql2;
                    foreach (var item in sample.MainText)  //insert maintext
                    {
                        Dictionary <string, object> param = new Dictionary <string, object>
                        {
                            { "SampleId", sampleId },
                            { "Type", item.Type },
                            { "Text", item.Text },
                            { "Font", item.Font },
                            { "PositionX", item.PositionX },
                            { "PositionY", item.PositionY },
                            { "FontSize", item.FontSize },
                            { "FontOrder", item.Order }
                        };
                        contexto.AddParams(cmd, param);
                        cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                    }
                    foreach (var item in sample.SmallText)  //insert small text
                    {
                        var param = new Dictionary <string, object>
                        {
                            { "SampleId", sampleId },
                            { "Type", item.Type },
                            { "Text", item.Text },
                            { "Font", item.Font },
                            { "PositionX", item.PositionX },
                            { "PositionY", item.PositionY },
                            { "FontSize", item.FontSize },
                            { "FontOrder", item.Order }
                        };
                        contexto.AddParams(cmd, param);
                        cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                    }
                    transaction.Commit();
                    return(sampleId);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw;
                }
                finally
                {
                    contexto.CloseConnection();
                }
            }
        }