public void Modify <TValue>(Expression <Func <RavenConfiguration, TValue> > key, TValue value, string customStringValue = null) { var expression = key.Body as MemberExpression; var members = new Stack <MemberInfo>(); while (expression != null) { members.Push(expression.Member); expression = expression.Expression as MemberExpression; } object entity = configuration; foreach (var member in members) { var entityObject = member.GetValue(entity); if (entityObject is ConfigurationCategory) { entity = entityObject; } else { member.SetValue(entity, value); } } using (configuration.AllowChangeAfterInit()) { configuration.SetSetting(RavenConfiguration.GetKey(key), customStringValue ?? value.ToString()); } }