public void Apply(ApplyOptions options) {
            if (IsEmpty)
                return;

            using (var database = new SettingsProviderDatabase()) {
                var section = database.Sections.FirstOrDefault(s => s.Name == Section);
                if (section == null) {
                    section = new Section() { Name = Section, AssemblyName = Assembly };
                    database.AddToSections(section);
                }

                foreach (Action action in Actions) {
                    switch (action.Type) {
                        case Action.ActionType.Insert:
                            if (action.IsConnectionString) 
                                InsertConnectionString(options, database, section, action);
                            else 
                                InsertApplcationSetting(section, action);
                            break;
                        case Action.ActionType.Delete:
                            if (action.IsConnectionString) {
                                var names = from connectionName in database.SqlConnectionNames.Include("Section")
                                            where connectionName.Section.Id == section.Id && connectionName.Name == action.Name
                                            select connectionName;
                                foreach (var name in names) database.DeleteObject(name);
                            } else {
                                var settings = from setting in database.ApplicationSettings
                                               where setting.SectionId == section.Id && setting.Name == action.Name
                                               select setting;
                                foreach (var name in settings) database.DeleteObject(name);
                            }
                            break;
                        case Action.ActionType.Update:
                            if (action.IsConnectionString) {
                                SqlConnectionString connection = database.SqlConnectionNames
                                    .Include("Section")
                                    .Include("SqlConnectionString")
                                    .Where(sec => sec.Section.Id == section.Id)
                                    .Select(sec => sec.SqlConnectionString)
                                    .FirstOrDefault();
                                if(connection != null)
                                    connection.ConnectionString = action.Value;
                            } else {
                                ApplicationSetting setting = database.ApplicationSettings
                                    .Include("Section")
                                    .Where(s => s.Section.Id == section.Id && s.Name == action.Name)
                                    .FirstOrDefault();
                                if (setting != null)
                                    setting.Value = action.Value;
                            }
                            break;
                    }
                }
                database.SaveChanges();
            }
        }