/// <summary>
        /// Removes all existing marketing and flag info from the database.
        /// </summary>
        /// <param name="locale">Location to match</param>
        /// <param name="backupFirst">Insert existing data into backup tables before clearing.</param>
        public static void ClearData(string locale, bool backupFirst)
        {
            var db = new B2BProductCatalog();

            // Backup data in marketing/flags tables
            if (backupFirst)
            {
                foreach (var row in db.MarketingInfoCollection.GetAsArray("Locale='" + locale + "'", ""))
                {
                    var backup = new MarketingInfo_BackupRow
                    {
                        StyleNumber = row.StyleNumber,
                        SalesOrg = row.SalesOrg,
                        DistributionChannel = row.DistributionChannel,
                        StyleSizeRun = row.StyleSizeRun,
                        StyleKeywords = row.StyleKeywords,
                        MarketingDescEn = row.MarketingDescEn,
                        MarketingDescFr = row.MarketingDescFr,
                        NavCategory1 = row.NavCategory1,
                        NavCategory2 = row.NavCategory2,
                        NavCategory3 = row.NavCategory3,
                        NavCategory4 = row.NavCategory4,
                        NavCategoryFr1 = row.NavCategoryFr1,
                        NavCategoryFr2 = row.NavCategoryFr2,
                        NavCategoryFr3 = row.NavCategoryFr3,
                        NavCategoryFr4 = row.NavCategoryFr4,
                        Flag1 = row.Flag1,
                        Flag2 = row.Flag2,
                        Flag3 = row.Flag3,
                        Flag4 = row.Flag4,
                        Flag5 = row.Flag5,
                        Flag6 = row.Flag6,
                        Flag7 = row.Flag7,
                        Flag8 = row.Flag8,
                        Flag9 = row.Flag9,
                        Flag10 = row.Flag10,
                        Flag11 = row.Flag11,
                        Flag12 = row.Flag12,
                        CreatedOn = !row.IsCreatedOnNull ? row.CreatedOn : DateTime.MinValue,
                        UpdatedOn = !row.IsUpdatedOnNull ? row.UpdatedOn : DateTime.MinValue,
                        IsCreatedOnNull = row.IsCreatedOnNull,
                        IsUpdatedOnNull = row.IsUpdatedOnNull,
                        Locale = row.Locale
                    };

                    db.MarketingInfo_BackupCollection.Insert(backup);
                }

                foreach (var row in db.FlagInfoCollection.GetAsArray("Locale='" + locale + "'", ""))
                {
                    var backup = new FlagInfo_BackupRow
                    {
                        FlagId = row.FlagId,
                        FlagName = row.FlagName,
                        FlagNameFr = row.FlagNameFr,
                        FlagDescription = row.FlagDescription,
                        FlagDescriptionFr = row.FlagDescriptionFr,
                        SalesOrg = row.SalesOrg,
                        DistributionChannel = row.DistributionChannel,
                        Category = row.Category,
                        Sequence = row.Sequence,
                        FileName = row.FileName,
                        CreatedOn = !row.IsCreatedOnNull ? row.CreatedOn : DateTime.MinValue,
                        UpdatedOn = !row.IsUpdatedOnNull ? row.UpdatedOn : DateTime.MinValue,
                        IsCreatedOnNull = row.IsCreatedOnNull,
                        IsUpdatedOnNull = row.IsUpdatedOnNull,
                        Locale = row.Locale
                    };

                    db.FlagInfo_BackupCollection.Insert(backup);
                }

                foreach (var row in db.FlagCategoryCollection.GetAsArray("Locale='" + locale + "'", ""))
                {
                    var backup = new FlagCategory_BackupRow
                    {
                        CategoryId = row.CategoryId,
                        Category = row.Category,
                        SalesOrg = row.SalesOrg,
                        DistributionChannel = row.DistributionChannel,
                        Sequence = row.Sequence,
                        CreatedOn = !row.IsCreatedOnNull ? row.CreatedOn : DateTime.MinValue,
                        UpdatedOn = !row.IsUpdatedOnNull ? row.UpdatedOn : DateTime.MinValue,
                        IsCreatedOnNull = row.IsCreatedOnNull,
                        IsUpdatedOnNull = row.IsUpdatedOnNull,
                        Locale = row.Locale
                    };

                    db.FlagCategory_BackupCollection.Insert(backup);
                }
            }

            // Delete the records by locale
            db.MarketingInfoCollection.Delete("Locale='" + locale + "'");
            db.FlagInfoCollection.Delete("Locale='" + locale + "'");
            db.FlagCategoryCollection.Delete("Locale='" + locale + "'");
        }
 /// <summary>
 /// Deletes the specified object from the <c>FlagInfo_Backup</c> table.
 /// </summary>
 /// <param name="value">The <see cref="FlagInfo_BackupRow"/> object to delete.</param>
 /// <returns>true if the record was deleted; otherwise, false.</returns>
 public bool Delete(FlagInfo_BackupRow value)
 {
     return DeleteByPrimaryKey(value.PkId);
 }
 /// <summary>
 /// Converts <see cref="System.Data.DataRow"/> to <see cref="FlagInfo_BackupRow"/>.
 /// </summary>
 /// <param name="row">The <see cref="System.Data.DataRow"/> object to be mapped.</param>
 /// <returns>A reference to the <see cref="FlagInfo_BackupRow"/> object.</returns>
 protected virtual FlagInfo_BackupRow MapRow(DataRow row)
 {
     FlagInfo_BackupRow mappedObject = new FlagInfo_BackupRow();
     DataTable dataTable = row.Table;
     DataColumn dataColumn;
     // Column "PkId"
     dataColumn = dataTable.Columns["PkId"];
     if(!row.IsNull(dataColumn))
         mappedObject.PkId = (int)row[dataColumn];
     // Column "FlagId"
     dataColumn = dataTable.Columns["FlagId"];
     if(!row.IsNull(dataColumn))
         mappedObject.FlagId = (string)row[dataColumn];
     // Column "FlagName"
     dataColumn = dataTable.Columns["FlagName"];
     if(!row.IsNull(dataColumn))
         mappedObject.FlagName = (string)row[dataColumn];
     // Column "FlagNameFr"
     dataColumn = dataTable.Columns["FlagNameFr"];
     if(!row.IsNull(dataColumn))
         mappedObject.FlagNameFr = (string)row[dataColumn];
     // Column "FlagDescription"
     dataColumn = dataTable.Columns["FlagDescription"];
     if(!row.IsNull(dataColumn))
         mappedObject.FlagDescription = (string)row[dataColumn];
     // Column "FlagDescriptionFr"
     dataColumn = dataTable.Columns["FlagDescriptionFr"];
     if(!row.IsNull(dataColumn))
         mappedObject.FlagDescriptionFr = (string)row[dataColumn];
     // Column "Category"
     dataColumn = dataTable.Columns["Category"];
     if(!row.IsNull(dataColumn))
         mappedObject.Category = (string)row[dataColumn];
     // Column "FileName"
     dataColumn = dataTable.Columns["FileName"];
     if(!row.IsNull(dataColumn))
         mappedObject.FileName = (string)row[dataColumn];
     // Column "SalesOrg"
     dataColumn = dataTable.Columns["SalesOrg"];
     if(!row.IsNull(dataColumn))
         mappedObject.SalesOrg = (string)row[dataColumn];
     // Column "DistributionChannel"
     dataColumn = dataTable.Columns["DistributionChannel"];
     if(!row.IsNull(dataColumn))
         mappedObject.DistributionChannel = (string)row[dataColumn];
     // Column "Sequence"
     dataColumn = dataTable.Columns["Sequence"];
     if(!row.IsNull(dataColumn))
         mappedObject.Sequence = (int)row[dataColumn];
     // Column "CreatedOn"
     dataColumn = dataTable.Columns["CreatedOn"];
     if(!row.IsNull(dataColumn))
         mappedObject.CreatedOn = (System.DateTime)row[dataColumn];
     // Column "UpdatedOn"
     dataColumn = dataTable.Columns["UpdatedOn"];
     if(!row.IsNull(dataColumn))
         mappedObject.UpdatedOn = (System.DateTime)row[dataColumn];
     // Column "DistributionChannel"
     dataColumn = dataTable.Columns["Locale"];
     if (!row.IsNull(dataColumn))
         mappedObject.Locale = (string)row[dataColumn];
     return mappedObject;
 }
        /// <summary>
        /// Reads data from the provided data reader and returns 
        /// an array of mapped objects.
        /// </summary>
        /// <param name="reader">The <see cref="System.Data.IDataReader"/> object to read data from the table.</param>
        /// <param name="startIndex">The index of the first record to map.</param>
        /// <param name="length">The number of records to map.</param>
        /// <param name="totalRecordCount">A reference parameter that returns the total number 
        /// of records in the reader object if 0 was passed into the method; otherwise it returns -1.</param>
        /// <returns>An array of <see cref="FlagInfo_BackupRow"/> objects.</returns>
        protected virtual FlagInfo_BackupRow[] MapRecords(IDataReader reader, 
										int startIndex, int length, ref int totalRecordCount)
        {
            if(0 > startIndex)
                throw new ArgumentOutOfRangeException("startIndex", startIndex, "StartIndex cannot be less than zero.");
            if(0 > length)
                throw new ArgumentOutOfRangeException("length", length, "Length cannot be less than zero.");

            int pkIdColumnIndex = reader.GetOrdinal("pkId");
            int flagIdColumnIndex = reader.GetOrdinal("FlagId");
            int flagNameColumnIndex = reader.GetOrdinal("FlagName");
            int flagNameFrColumnIndex = reader.GetOrdinal("FlagNameFr");
            int flagDescriptionColumnIndex = reader.GetOrdinal("FlagDescription");
            int flagDescriptionFrColumnIndex = reader.GetOrdinal("FlagDescriptionFr");
            int categoryColumnIndex = reader.GetOrdinal("Category");
            int fileNameColumnIndex = reader.GetOrdinal("FileName");
            int salesOrgColumnIndex = reader.GetOrdinal("SalesOrg");
            int distributionChannelColumnIndex = reader.GetOrdinal("DistributionChannel");
            int sequenceColumnIndex = reader.GetOrdinal("Sequence");
            int createdOnColumnIndex = reader.GetOrdinal("CreatedOn");
            int updatedOnColumnIndex = reader.GetOrdinal("UpdatedOn");
            int localeColumnIndex = reader.GetOrdinal("Locale");

            System.Collections.ArrayList recordList = new System.Collections.ArrayList();
            int ri = -startIndex;
            while(reader.Read())
            {
                ri++;
                if(ri > 0 && ri <= length)
                {
                    FlagInfo_BackupRow record = new FlagInfo_BackupRow();
                    recordList.Add(record);

                    record.PkId = Convert.ToInt32(reader.GetValue(pkIdColumnIndex));
                    if(!reader.IsDBNull(flagIdColumnIndex))
                        record.FlagId = Convert.ToString(reader.GetValue(flagIdColumnIndex));
                    record.FlagName = Convert.ToString(reader.GetValue(flagNameColumnIndex));
                    if(!reader.IsDBNull(flagNameFrColumnIndex))
                        record.FlagNameFr = Convert.ToString(reader.GetValue(flagNameFrColumnIndex));
                    if(!reader.IsDBNull(flagDescriptionColumnIndex))
                        record.FlagDescription = Convert.ToString(reader.GetValue(flagDescriptionColumnIndex));
                    if(!reader.IsDBNull(flagDescriptionFrColumnIndex))
                        record.FlagDescriptionFr = Convert.ToString(reader.GetValue(flagDescriptionFrColumnIndex));
                    record.Category = Convert.ToString(reader.GetValue(categoryColumnIndex));
                    if(!reader.IsDBNull(fileNameColumnIndex))
                        record.FileName = Convert.ToString(reader.GetValue(fileNameColumnIndex));
                    record.SalesOrg = Convert.ToString(reader.GetValue(salesOrgColumnIndex));
                    record.DistributionChannel = Convert.ToString(reader.GetValue(distributionChannelColumnIndex));
                    if(!reader.IsDBNull(sequenceColumnIndex))
                        record.Sequence = Convert.ToInt32(reader.GetValue(sequenceColumnIndex));
                    if(!reader.IsDBNull(createdOnColumnIndex))
                        record.CreatedOn = Convert.ToDateTime(reader.GetValue(createdOnColumnIndex));
                    if(!reader.IsDBNull(updatedOnColumnIndex))
                        record.UpdatedOn = Convert.ToDateTime(reader.GetValue(updatedOnColumnIndex));
                    if (!reader.IsDBNull(localeColumnIndex))
                        record.Locale = Convert.ToString(reader.GetValue(localeColumnIndex));

                    if(ri == length && 0 != totalRecordCount)
                        break;
                }
            }

            totalRecordCount = 0 == totalRecordCount ? ri + startIndex : -1;
            return (FlagInfo_BackupRow[])(recordList.ToArray(typeof(FlagInfo_BackupRow)));
        }
 /// <summary>
 /// Updates a record in the <c>FlagInfo_Backup</c> table.
 /// </summary>
 /// <param name="value">The <see cref="FlagInfo_BackupRow"/>
 /// object used to update the table record.</param>
 /// <returns>true if the record was updated; otherwise, false.</returns>
 public virtual bool Update(FlagInfo_BackupRow value)
 {
     string sqlStr = "UPDATE [dbo].[FlagInfo_Backup] SET " +
         "[FlagId]=" + _db.CreateSqlParameterName("FlagId") + ", " +
         "[FlagName]=" + _db.CreateSqlParameterName("FlagName") + ", " +
         "[FlagNameFr]=" + _db.CreateSqlParameterName("FlagNameFr") + ", " +
         "[FlagDescription]=" + _db.CreateSqlParameterName("FlagDescription") + ", " +
         "[FlagDescriptionFr]=" + _db.CreateSqlParameterName("FlagDescriptionFr") + ", " +
         "[Category]=" + _db.CreateSqlParameterName("Category") + ", " +
         "[FileName]=" + _db.CreateSqlParameterName("FileName") + ", " +
         "[SalesOrg]=" + _db.CreateSqlParameterName("SalesOrg") + ", " +
         "[DistributionChannel]=" + _db.CreateSqlParameterName("DistributionChannel") + ", " +
         "[Sequence]=" + _db.CreateSqlParameterName("Sequence") + ", " +
         "[CreatedOn]=" + _db.CreateSqlParameterName("CreatedOn") + ", " +
         "[UpdatedOn]=" + _db.CreateSqlParameterName("UpdatedOn") + ", " +
         "[Locale]=" + _db.CreateSqlParameterName("Locale") +
         " WHERE " +
         "[pkId]=" + _db.CreateSqlParameterName("PkId");
     IDbCommand cmd = _db.CreateCommand(sqlStr);
     AddParameter(cmd, "FlagId", value.FlagId);
     AddParameter(cmd, "FlagName", value.FlagName);
     AddParameter(cmd, "FlagNameFr", value.FlagNameFr);
     AddParameter(cmd, "FlagDescription", value.FlagDescription);
     AddParameter(cmd, "FlagDescriptionFr", value.FlagDescriptionFr);
     AddParameter(cmd, "Category", value.Category);
     AddParameter(cmd, "FileName", value.FileName);
     AddParameter(cmd, "SalesOrg", value.SalesOrg);
     AddParameter(cmd, "DistributionChannel", value.DistributionChannel);
     AddParameter(cmd, "Sequence",
         value.IsSequenceNull ? DBNull.Value : (object)value.Sequence);
     AddParameter(cmd, "CreatedOn",
         value.IsCreatedOnNull ? DBNull.Value : (object)value.CreatedOn);
     AddParameter(cmd, "UpdatedOn",
         value.IsUpdatedOnNull ? DBNull.Value : (object)value.UpdatedOn);
     AddParameter(cmd, "Locale", value.Locale);
     AddParameter(cmd, "PkId", value.PkId);
     return 0 != cmd.ExecuteNonQuery();
 }
 /// <summary>
 /// Adds a new record into the <c>FlagInfo_Backup</c> table.
 /// </summary>
 /// <param name="value">The <see cref="FlagInfo_BackupRow"/> object to be inserted.</param>
 public virtual void Insert(FlagInfo_BackupRow value)
 {
     string sqlStr = "INSERT INTO [dbo].[FlagInfo_Backup] (" +
         "[FlagId], " +
         "[FlagName], " +
         "[FlagNameFr], " +
         "[FlagDescription], " +
         "[FlagDescriptionFr], " +
         "[Category], " +
         "[FileName], " +
         "[SalesOrg], " +
         "[DistributionChannel], " +
         "[Sequence], " +
         "[CreatedOn], " +
         "[UpdatedOn], " +
         "[Locale]" +
         ") VALUES (" +
         _db.CreateSqlParameterName("FlagId") + ", " +
         _db.CreateSqlParameterName("FlagName") + ", " +
         _db.CreateSqlParameterName("FlagNameFr") + ", " +
         _db.CreateSqlParameterName("FlagDescription") + ", " +
         _db.CreateSqlParameterName("FlagDescriptionFr") + ", " +
         _db.CreateSqlParameterName("Category") + ", " +
         _db.CreateSqlParameterName("FileName") + ", " +
         _db.CreateSqlParameterName("SalesOrg") + ", " +
         _db.CreateSqlParameterName("DistributionChannel") + ", " +
         _db.CreateSqlParameterName("Sequence") + ", " +
         _db.CreateSqlParameterName("CreatedOn") + ", " +
         _db.CreateSqlParameterName("UpdatedOn") + ", " +
         _db.CreateSqlParameterName("Locale") + ");SELECT @@IDENTITY";
     IDbCommand cmd = _db.CreateCommand(sqlStr);
     AddParameter(cmd, "FlagId", value.FlagId);
     AddParameter(cmd, "FlagName", value.FlagName);
     AddParameter(cmd, "FlagNameFr", value.FlagNameFr);
     AddParameter(cmd, "FlagDescription", value.FlagDescription);
     AddParameter(cmd, "FlagDescriptionFr", value.FlagDescriptionFr);
     AddParameter(cmd, "Category", value.Category);
     AddParameter(cmd, "FileName", value.FileName);
     AddParameter(cmd, "SalesOrg", value.SalesOrg);
     AddParameter(cmd, "DistributionChannel", value.DistributionChannel);
     AddParameter(cmd, "Sequence",
         value.IsSequenceNull ? DBNull.Value : (object)value.Sequence);
     AddParameter(cmd, "CreatedOn",
         value.IsCreatedOnNull ? DBNull.Value : (object)value.CreatedOn);
     AddParameter(cmd, "UpdatedOn",
         value.IsUpdatedOnNull ? DBNull.Value : (object)value.UpdatedOn);
     AddParameter(cmd, "Locale", value.Locale);
     value.PkId = Convert.ToInt32(cmd.ExecuteScalar());
 }