/// <summary>
        /// Inserts the integration service web method call parameter.
        /// </summary>
        /// <param name="dto">The dto.</param>
        /// <exception cref="System.ArgumentNullException">dto</exception>
        /// <exception cref="System.Data.DBConcurrencyException"></exception>
        public void InsertIntegrationServiceWebMethodCallParameter(IntegrationServiceWebMethodCallParameterDto dto)
        {
            const string CommandText = @"
INSERT INTO [dbo].[IntegrationServiceWebMethodCallParameters]
(
     [SettingsId]
    ,[ParentId]
    ,[LastModifiedOn]
    ,[Guid]
    ,[Name]
    ,[TypeCode]
    ,[TypeName]
    ,[TypeDisplayName]
    ,[IsNull]
    ,[IsArray]
    ,[ArrayItemCount]
    ,[IsEnum]
    ,[IsSoapHeader]
)
VALUES
(
     @settingsId
    ,@parentId
    ,GETDATE()
    ,@guid
    ,@name
    ,@typeCode
    ,@typeName
    ,@typeDisplayName
    ,@isNull
    ,@isArray
    ,@arrayItemCount
    ,@isEnum
    ,@isSoapHeader
);

SET @id = SCOPE_IDENTITY();";

            if (dto == null)
                throw new ArgumentNullException("dto");

            using (var cmd = new SqlCommand(CommandText))
            {
                var idParam = cmd.Parameters.Add("@id", SqlDbType.Int);

                idParam.Direction = ParameterDirection.Output;

                cmd.Parameters.AddWithValue("@settingsId", dto.SettingsId);
                cmd.Parameters.AddWithValue("@parentId", AdoHelper.NullCheck(dto.ParentId));
                cmd.Parameters.AddWithValue("@guid", dto.Guid);
                cmd.Parameters.AddWithValue("@name", dto.Name);
                cmd.Parameters.AddWithValue("@typeCode", dto.TypeCode.ToString());
                cmd.Parameters.AddWithValue("@typeName", dto.TypeName);
                cmd.Parameters.AddWithValue("@typeDisplayName", dto.TypeDisplayName);
                cmd.Parameters.AddWithValue("@isNull", dto.IsNull);
                cmd.Parameters.AddWithValue("@isArray", dto.IsArray);
                cmd.Parameters.AddWithValue("@arrayItemCount", AdoHelper.NullCheck(dto.ArrayItemCount));
                cmd.Parameters.AddWithValue("@isEnum", dto.IsEnum);
                cmd.Parameters.AddWithValue("@isSoapHeader", dto.IsSoapHeader);

                var rowsAffected = Database.Execute(cmd);

                if (rowsAffected == 0)
                    throw new DBConcurrencyException(ConcurencyException);

                dto.Id = (int)idParam.Value;
            }
        }
        /// <summary>
        /// Updates the integration service web method call parameter.
        /// </summary>
        /// <param name="dto">The dto.</param>
        /// <exception cref="System.ArgumentNullException">dto</exception>
        /// <exception cref="System.Data.DBConcurrencyException"></exception>
        public void UpdateIntegrationServiceWebMethodCallParameter(IntegrationServiceWebMethodCallParameterDto dto)
        {
            const string CommandText = @"
UPDATE [dbo].[IntegrationServiceWebMethodCallParameters]
SET
     [SettingsId] = @settingsId
    ,[ParentId] = @parentId
    ,[LastModifiedOn] = GETDATE()
    ,[Guid] = @guid
    ,[Name] = @name
    ,[TypeCode] = @typeCode
    ,[TypeName] = @typeName
    ,[TypeDisplayName] = @typeDisplayName
    ,[IsNull] = @isNull
    ,[IsArray] = @isArray
    ,[ArrayItemCount] = @arrayItemCount
    ,[IsEnum] = @isEnum
    ,[IsSoapHeader] = @isSoapHeader
WHERE [Id] = @id;";

            if (dto == null)
                throw new ArgumentNullException("dto");

            using (var cmd = new SqlCommand(CommandText))
            {
                cmd.Parameters.AddWithValue("@id", dto.Id);
                cmd.Parameters.AddWithValue("@settingsId", dto.SettingsId);
                cmd.Parameters.AddWithValue("@parentId", AdoHelper.NullCheck(dto.ParentId));
                cmd.Parameters.AddWithValue("@guid", dto.Guid);
                cmd.Parameters.AddWithValue("@name", dto.Name);
                cmd.Parameters.AddWithValue("@typeCode", dto.TypeCode.ToString());
                cmd.Parameters.AddWithValue("@typeName", dto.TypeName);
                cmd.Parameters.AddWithValue("@typeDisplayName", dto.TypeDisplayName);
                cmd.Parameters.AddWithValue("@isNull", dto.IsNull);
                cmd.Parameters.AddWithValue("@isArray", dto.IsArray);
                cmd.Parameters.AddWithValue("@arrayItemCount", AdoHelper.NullCheck(dto.ArrayItemCount));
                cmd.Parameters.AddWithValue("@isEnum", dto.IsEnum);
                cmd.Parameters.AddWithValue("@isSoapHeader", dto.IsSoapHeader);

                var rowsAffected = Database.Execute(cmd);
                if (rowsAffected == 0)
                    throw new DBConcurrencyException(ConcurencyException);
            }
        }
        /// <summary>
        /// Reads the integration service web method call parameters.
        /// </summary>
        /// <param name="settingsDto">The settings dto.</param>
        /// <param name="reader">The reader.</param>
        private static void ReadIntegrationServiceWebMethodCallParameters(IntegrationServiceWebMethodCallSettingsDto settingsDto, IDataReader reader)
        {
            reader.NextResult();

            var parameters = new List<IntegrationServiceWebMethodCallParameterDto>();
            var parametersMap = new Dictionary<int, IntegrationServiceWebMethodCallParameterDto>();

            while (reader.Read())
            {
                var dto = new IntegrationServiceWebMethodCallParameterDto
                              {
                                  Id = reader.GetInt32(0),
                                  ParentId = reader.GetNullableInt(1),
                                  Guid = reader.GetGuid(2),
                                  Name = reader.GetString(3),
                                  TypeCode =
                                      (WebServiceTypeCode)
                                      Enum.Parse(typeof(WebServiceTypeCode), reader.GetString(4), true),
                                  TypeName = reader.GetString(5),
                                  TypeDisplayName = reader.GetString(6),
                                  IsNull = reader.GetBoolean(7),
                                  IsArray = reader.GetBoolean(8),
                                  ArrayItemCount = reader.GetNullableInt(9),
                                  IsEnum = reader.GetBoolean(10),
                                  IsSoapHeader = reader.GetBoolean(11)
                              };

                parameters.Add(dto);
                parametersMap[dto.Id] = dto;
            }

            foreach (var parameter in parameters)
            {
                if (!parameter.ParentId.HasValue)
                    settingsDto.MethodParameters.Add(parameter);
                else
                    parametersMap[parameter.ParentId.Value].Subfields.Add(parameter);
            }
        }