/// <summary>
        /// Adds a new record into the <c>RetailRateHistory</c> table.
        /// </summary>
        /// <param name="value">The <see cref="RetailRateHistoryRow"/> object to be inserted.</param>
        public virtual void Insert(RetailRateHistoryRow value)
        {
            string sqlStr = "INSERT INTO [dbo].[RetailRateHistory] (" +
                            "[retail_route_id], " +
                            "[date_on], " +
                            "[date_off], " +
                            "[rate_info_id], " +
                            "[connect_fee], " +
                            "[disconnect_fee], " +
                            "[per_call_cost], " +
                            "[cost_increase_per_call], " +
                            "[cost_increase_per_call_start], " +
                            "[cost_increase_per_call_stop], " +
                            "[tax_first_incr_cost], " +
                            "[tax_add_incr_cost], " +
                            "[surcharge_delay], " +
                            "[rating_delay]" +
                            ") VALUES (" +
                            _db.CreateSqlParameterName("Retail_route_id") + ", " +
                            _db.CreateSqlParameterName("Date_on") + ", " +
                            _db.CreateSqlParameterName("Date_off") + ", " +
                            _db.CreateSqlParameterName("Rate_info_id") + ", " +
                            _db.CreateSqlParameterName("Connect_fee") + ", " +
                            _db.CreateSqlParameterName("Disconnect_fee") + ", " +
                            _db.CreateSqlParameterName("Per_call_cost") + ", " +
                            _db.CreateSqlParameterName("Cost_increase_per_call") + ", " +
                            _db.CreateSqlParameterName("Cost_increase_per_call_start") + ", " +
                            _db.CreateSqlParameterName("Cost_increase_per_call_stop") + ", " +
                            _db.CreateSqlParameterName("Tax_first_incr_cost") + ", " +
                            _db.CreateSqlParameterName("Tax_add_incr_cost") + ", " +
                            _db.CreateSqlParameterName("Surcharge_delay") + ", " +
                            _db.CreateSqlParameterName("Rating_delay") + ")";
            IDbCommand cmd = _db.CreateCommand(sqlStr);

            AddParameter(cmd, "Retail_route_id", value.Retail_route_id);
            AddParameter(cmd, "Date_on", value.Date_on);
            AddParameter(cmd, "Date_off", value.Date_off);
            AddParameter(cmd, "Rate_info_id", value.Rate_info_id);
            AddParameter(cmd, "Connect_fee", value.Connect_fee);
            AddParameter(cmd, "Disconnect_fee", value.Disconnect_fee);
            AddParameter(cmd, "Per_call_cost", value.Per_call_cost);
            AddParameter(cmd, "Cost_increase_per_call", value.Cost_increase_per_call);
            AddParameter(cmd, "Cost_increase_per_call_start", value.Cost_increase_per_call_start);
            AddParameter(cmd, "Cost_increase_per_call_stop", value.Cost_increase_per_call_stop);
            AddParameter(cmd, "Tax_first_incr_cost", value.Tax_first_incr_cost);
            AddParameter(cmd, "Tax_add_incr_cost", value.Tax_add_incr_cost);
            AddParameter(cmd, "Surcharge_delay", value.Surcharge_delay);
            AddParameter(cmd, "Rating_delay", value.Rating_delay);
            cmd.ExecuteNonQuery();
        }
        /// <summary>
        /// Updates a record in the <c>RetailRateHistory</c> table.
        /// </summary>
        /// <param name="value">The <see cref="RetailRateHistoryRow"/>
        /// object used to update the table record.</param>
        /// <returns>true if the record was updated; otherwise, false.</returns>
        public virtual bool Update(RetailRateHistoryRow value)
        {
            string sqlStr = "UPDATE [dbo].[RetailRateHistory] SET " +
                            "[date_off]=" + _db.CreateSqlParameterName("Date_off") + ", " +
                            "[rate_info_id]=" + _db.CreateSqlParameterName("Rate_info_id") + ", " +
                            "[connect_fee]=" + _db.CreateSqlParameterName("Connect_fee") + ", " +
                            "[disconnect_fee]=" + _db.CreateSqlParameterName("Disconnect_fee") + ", " +
                            "[per_call_cost]=" + _db.CreateSqlParameterName("Per_call_cost") + ", " +
                            "[cost_increase_per_call]=" + _db.CreateSqlParameterName("Cost_increase_per_call") + ", " +
                            "[cost_increase_per_call_start]=" + _db.CreateSqlParameterName("Cost_increase_per_call_start") + ", " +
                            "[cost_increase_per_call_stop]=" + _db.CreateSqlParameterName("Cost_increase_per_call_stop") + ", " +
                            "[tax_first_incr_cost]=" + _db.CreateSqlParameterName("Tax_first_incr_cost") + ", " +
                            "[tax_add_incr_cost]=" + _db.CreateSqlParameterName("Tax_add_incr_cost") + ", " +
                            "[surcharge_delay]=" + _db.CreateSqlParameterName("Surcharge_delay") + ", " +
                            "[rating_delay]=" + _db.CreateSqlParameterName("Rating_delay") +
                            " WHERE " +
                            "[retail_route_id]=" + _db.CreateSqlParameterName("Retail_route_id") + " AND " +
                            "[date_on]=" + _db.CreateSqlParameterName("Date_on");
            IDbCommand cmd = _db.CreateCommand(sqlStr);

            AddParameter(cmd, "Date_off", value.Date_off);
            AddParameter(cmd, "Rate_info_id", value.Rate_info_id);
            AddParameter(cmd, "Connect_fee", value.Connect_fee);
            AddParameter(cmd, "Disconnect_fee", value.Disconnect_fee);
            AddParameter(cmd, "Per_call_cost", value.Per_call_cost);
            AddParameter(cmd, "Cost_increase_per_call", value.Cost_increase_per_call);
            AddParameter(cmd, "Cost_increase_per_call_start", value.Cost_increase_per_call_start);
            AddParameter(cmd, "Cost_increase_per_call_stop", value.Cost_increase_per_call_stop);
            AddParameter(cmd, "Tax_first_incr_cost", value.Tax_first_incr_cost);
            AddParameter(cmd, "Tax_add_incr_cost", value.Tax_add_incr_cost);
            AddParameter(cmd, "Surcharge_delay", value.Surcharge_delay);
            AddParameter(cmd, "Rating_delay", value.Rating_delay);
            AddParameter(cmd, "Retail_route_id", value.Retail_route_id);
            AddParameter(cmd, "Date_on", value.Date_on);
            return(0 != cmd.ExecuteNonQuery());
        }
        /// <summary>
        /// Converts <see cref="System.Data.DataRow"/> to <see cref="RetailRateHistoryRow"/>.
        /// </summary>
        /// <param name="row">The <see cref="System.Data.DataRow"/> object to be mapped.</param>
        /// <returns>A reference to the <see cref="RetailRateHistoryRow"/> object.</returns>
        protected virtual RetailRateHistoryRow MapRow(DataRow row)
        {
            RetailRateHistoryRow mappedObject = new RetailRateHistoryRow();
            DataTable            dataTable    = row.Table;
            DataColumn           dataColumn;

            // Column "Retail_route_id"
            dataColumn = dataTable.Columns["Retail_route_id"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Retail_route_id = (int)row[dataColumn];
            }
            // Column "Date_on"
            dataColumn = dataTable.Columns["Date_on"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Date_on = (System.DateTime)row[dataColumn];
            }
            // Column "Date_off"
            dataColumn = dataTable.Columns["Date_off"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Date_off = (System.DateTime)row[dataColumn];
            }
            // Column "Rate_info_id"
            dataColumn = dataTable.Columns["Rate_info_id"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Rate_info_id = (int)row[dataColumn];
            }
            // Column "Connect_fee"
            dataColumn = dataTable.Columns["Connect_fee"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Connect_fee = (decimal)row[dataColumn];
            }
            // Column "Disconnect_fee"
            dataColumn = dataTable.Columns["Disconnect_fee"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Disconnect_fee = (decimal)row[dataColumn];
            }
            // Column "Per_call_cost"
            dataColumn = dataTable.Columns["Per_call_cost"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Per_call_cost = (decimal)row[dataColumn];
            }
            // Column "Cost_increase_per_call"
            dataColumn = dataTable.Columns["Cost_increase_per_call"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Cost_increase_per_call = (int)row[dataColumn];
            }
            // Column "Cost_increase_per_call_start"
            dataColumn = dataTable.Columns["Cost_increase_per_call_start"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Cost_increase_per_call_start = (int)row[dataColumn];
            }
            // Column "Cost_increase_per_call_stop"
            dataColumn = dataTable.Columns["Cost_increase_per_call_stop"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Cost_increase_per_call_stop = (int)row[dataColumn];
            }
            // Column "Tax_first_incr_cost"
            dataColumn = dataTable.Columns["Tax_first_incr_cost"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Tax_first_incr_cost = (decimal)row[dataColumn];
            }
            // Column "Tax_add_incr_cost"
            dataColumn = dataTable.Columns["Tax_add_incr_cost"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Tax_add_incr_cost = (decimal)row[dataColumn];
            }
            // Column "Surcharge_delay"
            dataColumn = dataTable.Columns["Surcharge_delay"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Surcharge_delay = (byte)row[dataColumn];
            }
            // Column "Rating_delay"
            dataColumn = dataTable.Columns["Rating_delay"];
            if (!row.IsNull(dataColumn))
            {
                mappedObject.Rating_delay = (byte)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="RetailRateHistoryRow"/> objects.</returns>
        protected virtual RetailRateHistoryRow[] 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 retail_route_idColumnIndex              = reader.GetOrdinal("retail_route_id");
            int date_onColumnIndex                      = reader.GetOrdinal("date_on");
            int date_offColumnIndex                     = reader.GetOrdinal("date_off");
            int rate_info_idColumnIndex                 = reader.GetOrdinal("rate_info_id");
            int connect_feeColumnIndex                  = reader.GetOrdinal("connect_fee");
            int disconnect_feeColumnIndex               = reader.GetOrdinal("disconnect_fee");
            int per_call_costColumnIndex                = reader.GetOrdinal("per_call_cost");
            int cost_increase_per_callColumnIndex       = reader.GetOrdinal("cost_increase_per_call");
            int cost_increase_per_call_startColumnIndex = reader.GetOrdinal("cost_increase_per_call_start");
            int cost_increase_per_call_stopColumnIndex  = reader.GetOrdinal("cost_increase_per_call_stop");
            int tax_first_incr_costColumnIndex          = reader.GetOrdinal("tax_first_incr_cost");
            int tax_add_incr_costColumnIndex            = reader.GetOrdinal("tax_add_incr_cost");
            int surcharge_delayColumnIndex              = reader.GetOrdinal("surcharge_delay");
            int rating_delayColumnIndex                 = reader.GetOrdinal("rating_delay");

            System.Collections.ArrayList recordList = new System.Collections.ArrayList();
            int ri = -startIndex;

            while (reader.Read())
            {
                ri++;
                if (ri > 0 && ri <= length)
                {
                    RetailRateHistoryRow record = new RetailRateHistoryRow();
                    recordList.Add(record);

                    record.Retail_route_id              = Convert.ToInt32(reader.GetValue(retail_route_idColumnIndex));
                    record.Date_on                      = Convert.ToDateTime(reader.GetValue(date_onColumnIndex));
                    record.Date_off                     = Convert.ToDateTime(reader.GetValue(date_offColumnIndex));
                    record.Rate_info_id                 = Convert.ToInt32(reader.GetValue(rate_info_idColumnIndex));
                    record.Connect_fee                  = Convert.ToDecimal(reader.GetValue(connect_feeColumnIndex));
                    record.Disconnect_fee               = Convert.ToDecimal(reader.GetValue(disconnect_feeColumnIndex));
                    record.Per_call_cost                = Convert.ToDecimal(reader.GetValue(per_call_costColumnIndex));
                    record.Cost_increase_per_call       = Convert.ToInt32(reader.GetValue(cost_increase_per_callColumnIndex));
                    record.Cost_increase_per_call_start = Convert.ToInt32(reader.GetValue(cost_increase_per_call_startColumnIndex));
                    record.Cost_increase_per_call_stop  = Convert.ToInt32(reader.GetValue(cost_increase_per_call_stopColumnIndex));
                    record.Tax_first_incr_cost          = Convert.ToDecimal(reader.GetValue(tax_first_incr_costColumnIndex));
                    record.Tax_add_incr_cost            = Convert.ToDecimal(reader.GetValue(tax_add_incr_costColumnIndex));
                    record.Surcharge_delay              = Convert.ToByte(reader.GetValue(surcharge_delayColumnIndex));
                    record.Rating_delay                 = Convert.ToByte(reader.GetValue(rating_delayColumnIndex));

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

            totalRecordCount = 0 == totalRecordCount ? ri + startIndex : -1;
            return((RetailRateHistoryRow[])(recordList.ToArray(typeof(RetailRateHistoryRow))));
        }
 /// <summary>
 /// Deletes the specified object from the <c>RetailRateHistory</c> table.
 /// </summary>
 /// <param name="value">The <see cref="RetailRateHistoryRow"/> object to delete.</param>
 /// <returns>true if the record was deleted; otherwise, false.</returns>
 public bool Delete(RetailRateHistoryRow value)
 {
     return(DeleteByPrimaryKey(value.Retail_route_id, value.Date_on));
 }