public void Handle(AppSettingsAddedOrUpdated @event)
        {
            using (var context = _contextFactory.Invoke())
            {
                var settings         = context.Query <AppSetting>().ToList();
                var taxiHailSettings = new ServerTaxiHailSetting();
                var defaultSettings  = taxiHailSettings.GetType().GetAllProperties();

                foreach (var appSetting in @event.AppSettings)
                {
                    if (!defaultSettings.ContainsKey(appSetting.Key))
                    {
                        // Setting doesn't exist
                        continue;
                    }

                    var    defaultSettingValue = taxiHailSettings.GetNestedPropertyValue(appSetting.Key);
                    string defaultSettingStringValue;

                    if (defaultSettings[appSetting.Key].PropertyType == typeof(bool?))
                    {
                        // Support for nullabool
                        defaultSettingStringValue = defaultSettingValue == null
                            ? "null"
                            : defaultSettingValue.ToString().ToLower();
                    }
                    else
                    {
                        defaultSettingStringValue = defaultSettingValue == null ? string.Empty : defaultSettingValue.ToString();
                    }

                    if (defaultSettingStringValue.IsBool())
                    {
                        // Needed because ToString() returns False instead of false
                        defaultSettingStringValue = defaultSettingStringValue.ToLower();
                    }

                    var settingToUpdate = settings.FirstOrDefault(x => x.Key == appSetting.Key);
                    if (settingToUpdate != null)
                    {
                        if (appSetting.Value != defaultSettingStringValue)
                        {
                            // Value is different than default
                            settingToUpdate.Value = appSetting.Value;
                        }
                        else
                        {
                            // Value is the same as default, remove the setting
                            context.Set <AppSetting>().Remove(settingToUpdate);
                        }
                    }
                    else
                    {
                        if (appSetting.Value != defaultSettingStringValue)
                        {
                            // New setting with value different than default
                            context.Set <AppSetting>().Add(new AppSetting(appSetting.Key, appSetting.Value));
                        }
                    }
                }

                context.SaveChanges();
            }

            // Refresh the ServerData object
            _serverSettings.Reload();
        }
 public object Get(ConfigurationResetRequest request)
 {
     _cacheClient.RemoveByPattern(string.Format("{0}*", ReferenceDataService.CacheKey));
     _serverSettings.Reload();
     return(true);
 }