Source/Config/SMOProperty.cs

using Microsoft.SqlServer.Management.Smo;
using SQL.SMO.Framework;
using System;
 
namespace SQL.SMO.Config
{
    public class SMOProperty : ISMOObject
    {
        private ConfigProperty _prop;
        private string goodName;
        public string Name
        {
            get
            {
                if (String.IsNullOrEmpty(goodName) && _prop != null)
                {
                    return _prop.DisplayName;
                }
                else if (!String.IsNullOrEmpty(goodName))
                {
                    return goodName;
                }
                else
                {
                    return null;
                }
            }
        }
        public string RealName
        {
            get { if (_prop != null) { return _prop.DisplayName; } else { return null; } }
        }
        public string Description
        {
            get { if (_prop != null) { return _prop.Description; } else { return null; } }
        }
        public object RunningValue
        {
            get { if (_prop != null) { return _prop.RunValue; } else { return null; } }
        }
        public object ConfigValue
        {
            get { if (_prop != null) { return _prop.ConfigValue; } else { return null; } }
        }
        public bool? ConfigMatchesRunning
        {
            get
            {
                if (_prop != null)
                {
                    return _prop.RunValue.Equals(_prop.ConfigValue);
                }
                else
                {
                    return null;
                }
            }
        }
 
        public bool IsDefined => _prop != null;
 
        public Type MSType => typeof(ConfigProperty);
 
 
        public SMOProperty(ConfigProperty prop)
        {
            _prop = prop;
        }
        public SMOProperty(string gname, ConfigProperty prop)
        {
            _prop = prop;
            goodName = gname;
        }
        internal SMOProperty(string gname, object prop)
        {
            if (prop == null)
            {
                _prop = null;
            }
            else
            {
                _prop = (ConfigProperty)prop;
            }
            goodName = gname;
        }
 
        internal void Alter(object newVal)
        {
            _prop.ConfigValue = Convert.ToInt32(newVal);
            ((Server)Context.Connection).Configuration.Alter();
        }
 
        public object ShowOriginal() => _prop;
    }
}