public static ISettingValue AddOrUpdateTenantSettingValue(this ISettingGroup group, ISettingValue value,
                                                                  int?tenantId)
        {
            using (var db = new AppDbContext())
            {
                var scopes      = SettingScopes.Tenant;
                var theTenantId = tenantId == null ? WeiChatApplicationContext.Current.TenantId : tenantId.Value;
                var groupInfo   = db.App_SettingGroups.FirstOrDefault(p => (p.Name == group.Name) && (p.Scopes == scopes));

                if (groupInfo == null)
                {
                    throw new Exception("名称为" + group.Name + "的配置组不存在。");
                }
                var settingValue =
                    db.App_SettingValues.FirstOrDefault(p => (p.Name == value.Name) && (p.Scopes == scopes));
                var isAdd = settingValue == null;
                if (settingValue == null)
                {
                    settingValue = new App_SettingValue();
                }
                settingValue.IsVisibleToClients = value.IsVisibleToClients;
                settingValue.Scopes             = scopes;
                settingValue.UpdateTime         = DateTime.Now;
                settingValue.DisplayName        = value.DisplayName;
                settingValue.Name        = value.Name;
                settingValue.Description = value.Description;
                settingValue.CreateBy    = WeiChatApplicationContext.Current.UserId;
                settingValue.Value       = value.Value;
                settingValue.GroupId     = groupInfo.Id;
                settingValue.CustomData  = value.CustomData;
                settingValue.TenantId    = theTenantId;
                if (isAdd)
                {
                    db.App_SettingValues.Add(settingValue);
                }
                db.SaveChanges();

                ConcurrentDictionary <string, ISettingValue> settings = null;
                if (SettingManager.Current.TenantSettings.ContainsKey(theTenantId))
                {
                    settings = SettingManager.Current.TenantSettings[theTenantId];
                }
                else
                {
                    settings = new ConcurrentDictionary <string, ISettingValue>();
                    {
                        var tenantSettings =
                            db.App_SettingValues.Where(p => (p.Scopes == scopes) && (p.TenantId == theTenantId));
                        foreach (var item in tenantSettings)
                        {
                            settings.TryAdd(item.Name, item);
                        }
                        SettingManager.Current.TenantSettings.TryAdd(theTenantId, settings);
                    }
                }
                settings.AddOrUpdate(settingValue.Name, settingValue, (tKey, existingVal) => { return(settingValue); });
                return(settingValue);
            }
        }
        public static ISettingValue AddOrUpdateApplicationSettingValue(this ISettingGroup group, ISettingValue value)
        {
            using (var db = new AppDbContext())
            {
                var scopes    = SettingScopes.Application;
                var groupInfo = db.App_SettingGroups.FirstOrDefault(p => (p.Name == group.Name) && (p.Scopes == scopes));

                if (groupInfo == null)
                {
                    throw new Exception("名称为" + group.Name + "的配置组不存在。");
                }
                var settingValue =
                    db.App_SettingValues.FirstOrDefault(p => (p.Name == value.Name) && (p.Scopes == scopes));
                var isAdd = settingValue == null;
                if (settingValue == null)
                {
                    settingValue = new App_SettingValue();
                }
                settingValue.IsVisibleToClients = value.IsVisibleToClients;
                settingValue.Scopes             = scopes;
                settingValue.UpdateTime         = DateTime.Now;
                settingValue.DisplayName        = value.DisplayName;
                settingValue.Name        = value.Name;
                settingValue.Description = value.Description;
                settingValue.CreateBy    = WeiChatApplicationContext.Current.UserId;
                settingValue.Value       = value.Value;
                settingValue.GroupId     = groupInfo.Id;
                if (isAdd)
                {
                    db.App_SettingValues.Add(settingValue);
                }
                db.SaveChanges();
                SettingManager.Current.ApplicationSettings.AddOrUpdate(value.Name, settingValue,
                                                                       (tKey, existingVal) => { return(settingValue); });
                return(settingValue);
            }
        }