/// <summary>
        /// Create a new <see cref="ParameterOverrideValueSet"/> from the old values
        /// </summary>
        /// <param name="oldValue">The old <see cref="ParameterOverrideValueSet"/></param>
        /// <param name="parameterValueSet">The <see cref="ParameterValueSet"/></param>
        /// <param name="container">The <see cref="ParameterOverride"/></param>
        /// <param name="transaction">The current transaction</param>
        /// <param name="partition">The current partition</param>
        /// <returns>The new <see cref="ParameterOverrideValueSet"/></returns>
        private ParameterOverrideValueSet CreateParameterOverrideValueSet(ParameterOverrideValueSet oldValue, ParameterValueSet parameterValueSet, ParameterOverride container, NpgsqlTransaction transaction, string partition)
        {
            var isOldValueNull = oldValue == null;
            var newValueSet    = new ParameterOverrideValueSet(Guid.NewGuid(), 1)
            {
                Manual            = new ValueArray <string>(isOldValueNull ? parameterValueSet.Manual : oldValue.Manual),
                Computed          = new ValueArray <string>(isOldValueNull ? parameterValueSet.Computed : oldValue.Computed),
                Reference         = new ValueArray <string>(isOldValueNull ? parameterValueSet.Reference : oldValue.Reference),
                Published         = new ValueArray <string>(isOldValueNull ? parameterValueSet.Published : oldValue.Published),
                Formula           = new ValueArray <string>(isOldValueNull ? parameterValueSet.Formula : oldValue.Formula),
                ParameterValueSet = parameterValueSet.Iid,
                ValueSwitch       = isOldValueNull ? CDP4Common.EngineeringModelData.ParameterSwitchKind.MANUAL : oldValue.ValueSwitch
            };

            this.ParameterOverrideValueSetService.CreateConcept(transaction, partition, newValueSet, container);
            return(newValueSet);
        }
        /// <summary>
        /// Instantiate and deserialize the properties of a <paramref name="ParameterOverrideValueSet"/>
        /// </summary>
        /// <param name="jObject">The <see cref="JObject"/> containing the data</param>
        /// <returns>The <see cref="ParameterOverrideValueSet"/> to instantiate</returns>
        public static CDP4Common.DTO.ParameterOverrideValueSet FromJsonObject(JObject jObject)
        {
            var iid                       = jObject["iid"].ToObject <Guid>();
            var revisionNumber            = jObject["revisionNumber"].IsNullOrEmpty() ? 0 : jObject["revisionNumber"].ToObject <int>();
            var parameterOverrideValueSet = new CDP4Common.DTO.ParameterOverrideValueSet(iid, revisionNumber);

            if (!jObject["computed"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.Computed = SerializerHelper.ToValueArray <string>(jObject["computed"].ToString());
            }

            if (!jObject["excludedDomain"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.ExcludedDomain.AddRange(jObject["excludedDomain"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["excludedPerson"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.ExcludedPerson.AddRange(jObject["excludedPerson"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["formula"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.Formula = SerializerHelper.ToValueArray <string>(jObject["formula"].ToString());
            }

            if (!jObject["manual"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.Manual = SerializerHelper.ToValueArray <string>(jObject["manual"].ToString());
            }

            if (!jObject["modifiedOn"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.ModifiedOn = jObject["modifiedOn"].ToObject <DateTime>();
            }

            if (!jObject["parameterValueSet"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.ParameterValueSet = jObject["parameterValueSet"].ToObject <Guid>();
            }

            if (!jObject["published"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.Published = SerializerHelper.ToValueArray <string>(jObject["published"].ToString());
            }

            if (!jObject["reference"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.Reference = SerializerHelper.ToValueArray <string>(jObject["reference"].ToString());
            }

            if (!jObject["thingPreference"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.ThingPreference = jObject["thingPreference"].ToObject <string>();
            }

            if (!jObject["valueSwitch"].IsNullOrEmpty())
            {
                parameterOverrideValueSet.ValueSwitch = jObject["valueSwitch"].ToObject <ParameterSwitchKind>();
            }

            return(parameterOverrideValueSet);
        }