/// <summary>
        /// Inserts an integration service web method call result field.
        /// </summary>
        /// <param name="dto">
        /// The DTO object.
        /// </param>
        public void InsertIntegrationServiceWebMethodCallResultField(IntegrationServiceWebMethodCallResultFieldDto dto)
        {
            const string CommandText = @"
INSERT INTO [dbo].[IntegrationServiceWebMethodCallResultFields]
(
     [SettingsId]
    ,[ParentId]
    ,[LastModifiedOn]
    ,[Name]
    ,[DeclaringTypeName]
)
VALUES
(
     @settingsId
    ,@parentId
    ,GETDATE()
    ,@name
    ,@declaringTypeName
);

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("@name", dto.Name);
                cmd.Parameters.AddWithValue("@declaringTypeName", dto.DeclaringTypeName);

                var rowsAffected = Database.Execute(cmd);
                if (rowsAffected == 0)
                    throw new DBConcurrencyException(ConcurencyException);

                dto.Id = (int)idParam.Value;
            }
        }
        /// <summary>
        /// Updates an integration service web method call result field.
        /// </summary>
        /// <param name="dto">
        /// The DTO object.
        /// </param>
        public void UpdateIntegrationServiceWebMethodCallResultField(IntegrationServiceWebMethodCallResultFieldDto dto)
        {
            const string CommandText = @"
UPDATE [dbo].[IntegrationServiceWebMethodCallResultFields]
SET
     [SettingsId] = @settingsId
    ,[ParentId] = @parentId
    ,[LastModifiedOn] = GETDATE()
    ,[Name] = @name
    ,[DeclaringTypeName] = @declaringTypeName
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("@name", dto.Name);
                cmd.Parameters.AddWithValue("@declaringTypeName", dto.DeclaringTypeName);

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

            var resultFields = new List<IntegrationServiceWebMethodCallResultFieldDto>();
            var resultFieldsMap = new Dictionary<int, IntegrationServiceWebMethodCallResultFieldDto>();

            while (reader.Read())
            {
                var dto = new IntegrationServiceWebMethodCallResultFieldDto
                          {
                              Id = reader.GetInt32(0),
                              ParentId = reader.GetNullableInt(1),
                              Name = reader.GetString(2),
                              DeclaringTypeName = reader.GetString(3)
                          };

                resultFields.Add(dto);
                resultFieldsMap[dto.Id] = dto;
            }

            foreach (var field in resultFields)
            {
                if (!field.ParentId.HasValue)
                    settingsDto.ResultFields.Add(field);
                else
                    resultFieldsMap[field.ParentId.Value].Fields.Add(field);
            }
        }