/// <summary>
 /// Add common parameters before calling a procedure
 /// </summary>
 /// <param name="cmd">command object, where parameters will be added</param>
 /// <param name="invoiceDetailObject"></param>
 private void AddCommonParams(SqlCommand cmd, InvoiceDetailBase invoiceDetailObject)
 {
     AddParameter(cmd, pNVarChar(InvoiceDetailBase.Property_InvoiceId, 15, invoiceDetailObject.InvoiceId));
     AddParameter(cmd, pGuid(InvoiceDetailBase.Property_InventoryId, invoiceDetailObject.InventoryId));
     AddParameter(cmd, pGuid(InvoiceDetailBase.Property_EquipmentId, invoiceDetailObject.EquipmentId));
     AddParameter(cmd, pNVarChar(InvoiceDetailBase.Property_EquipName, 500, invoiceDetailObject.EquipName));
     AddParameter(cmd, pNVarChar(InvoiceDetailBase.Property_EquipDetail, invoiceDetailObject.EquipDetail));
     AddParameter(cmd, pGuid(InvoiceDetailBase.Property_CompanyId, invoiceDetailObject.CompanyId));
     AddParameter(cmd, pInt32(InvoiceDetailBase.Property_BundleId, invoiceDetailObject.BundleId));
     AddParameter(cmd, pInt32(InvoiceDetailBase.Property_Quantity, invoiceDetailObject.Quantity));
     AddParameter(cmd, pDouble(InvoiceDetailBase.Property_UnitPrice, invoiceDetailObject.UnitPrice));
     AddParameter(cmd, pDouble(InvoiceDetailBase.Property_TotalPrice, invoiceDetailObject.TotalPrice));
     AddParameter(cmd, pDateTime(InvoiceDetailBase.Property_CreatedDate, invoiceDetailObject.CreatedDate));
     AddParameter(cmd, pNVarChar(InvoiceDetailBase.Property_CreatedBy, 50, invoiceDetailObject.CreatedBy));
 }
        /// <summary>
        /// Fills InvoiceDetail object
        /// </summary>
        /// <param name="invoiceDetailObject">The object to be filled</param>
        /// <param name="reader">The reader to use to fill a single object</param>
        /// <param name="start">The ordinal position from which to start reading the reader</param>
        protected void FillObject(InvoiceDetailBase invoiceDetailObject, SqlDataReader reader, int start)
        {
            invoiceDetailObject.Id          = reader.GetInt32(start + 0);
            invoiceDetailObject.InvoiceId   = reader.GetString(start + 1);
            invoiceDetailObject.InventoryId = reader.GetGuid(start + 2);
            invoiceDetailObject.EquipmentId = reader.GetGuid(start + 3);
            if (!reader.IsDBNull(4))
            {
                invoiceDetailObject.EquipName = reader.GetString(start + 4);
            }
            if (!reader.IsDBNull(5))
            {
                invoiceDetailObject.EquipDetail = reader.GetString(start + 5);
            }
            invoiceDetailObject.CompanyId = reader.GetGuid(start + 6);
            if (!reader.IsDBNull(7))
            {
                invoiceDetailObject.BundleId = reader.GetInt32(start + 7);
            }
            if (!reader.IsDBNull(8))
            {
                invoiceDetailObject.Quantity = reader.GetInt32(start + 8);
            }
            if (!reader.IsDBNull(9))
            {
                invoiceDetailObject.UnitPrice = reader.GetDouble(start + 9);
            }
            if (!reader.IsDBNull(10))
            {
                invoiceDetailObject.TotalPrice = reader.GetDouble(start + 10);
            }
            if (!reader.IsDBNull(11))
            {
                invoiceDetailObject.CreatedDate = reader.GetDateTime(start + 11);
            }
            if (!reader.IsDBNull(12))
            {
                invoiceDetailObject.CreatedBy = reader.GetString(start + 12);
            }
            FillBaseObject(invoiceDetailObject, reader, (start + 13));


            invoiceDetailObject.RowState = BaseBusinessEntity.RowStateEnum.NormalRow;
        }
        /// <summary>
        /// Updates InvoiceDetail
        /// </summary>
        /// <param name="invoiceDetailObject">Object to be updated</param>
        /// <returns>Number of rows affected</returns>
        public long Update(InvoiceDetailBase invoiceDetailObject)
        {
            try
            {
                SqlCommand cmd = GetSPCommand(UPDATEINVOICEDETAIL);

                AddParameter(cmd, pInt32(InvoiceDetailBase.Property_Id, invoiceDetailObject.Id));
                AddCommonParams(cmd, invoiceDetailObject);

                long result = UpdateRecord(cmd);
                if (result > 0)
                {
                    invoiceDetailObject.RowState = BaseBusinessEntity.RowStateEnum.NormalRow;
                }
                return(result);
            }
            catch (SqlException x)
            {
                throw new ObjectUpdateException(invoiceDetailObject, x);
            }
        }
        /// <summary>
        /// Inserts InvoiceDetail
        /// </summary>
        /// <param name="invoiceDetailObject">Object to be inserted</param>
        /// <returns>Number of rows affected</returns>
        public long Insert(InvoiceDetailBase invoiceDetailObject)
        {
            try
            {
                SqlCommand cmd = GetSPCommand(INSERTINVOICEDETAIL);

                AddParameter(cmd, pInt32Out(InvoiceDetailBase.Property_Id));
                AddCommonParams(cmd, invoiceDetailObject);

                long result = InsertRecord(cmd);
                if (result > 0)
                {
                    invoiceDetailObject.RowState = BaseBusinessEntity.RowStateEnum.NormalRow;
                    invoiceDetailObject.Id       = (Int32)GetOutParameter(cmd, InvoiceDetailBase.Property_Id);
                }
                return(result);
            }
            catch (SqlException x)
            {
                throw new ObjectInsertException(invoiceDetailObject, x);
            }
        }
 /// <summary>
 /// Fills InvoiceDetail object
 /// </summary>
 /// <param name="invoiceDetailObject">The object to be filled</param>
 /// <param name="reader">The reader to use to fill a single object</param>
 protected void FillObject(InvoiceDetailBase invoiceDetailObject, SqlDataReader reader)
 {
     FillObject(invoiceDetailObject, reader, 0);
 }