private InternalAnnotatableBuilder HasAnnotation(
            string name, object value, ConfigurationSource configurationSource, bool canOverrideSameSource)
        {
            var existingAnnotation = Metadata.FindAnnotation(name);

            if (existingAnnotation != null)
            {
                if (Equals(existingAnnotation.Value, value))
                {
                    existingAnnotation.UpdateConfigurationSource(configurationSource);
                    return(this);
                }

                if (!CanSetAnnotationValue(existingAnnotation, value, configurationSource, canOverrideSameSource))
                {
                    return(null);
                }

                Metadata.SetAnnotation(name, value, configurationSource);

                return(this);
            }

            Metadata.AddAnnotation(name, value, configurationSource);

            return(this);
        }
Beispiel #2
0
        private bool HasAnnotation(
            string name, object value, ConfigurationSource configurationSource, bool canOverrideSameSource)
        {
            var existingAnnotation = Metadata.FindAnnotation(name);

            if (existingAnnotation != null)
            {
                if (existingAnnotation.Value.Equals(value))
                {
                    existingAnnotation.UpdateConfigurationSource(configurationSource);
                    return(true);
                }

                var existingConfigurationSource = existingAnnotation.GetConfigurationSource();
                if (!configurationSource.Overrides(existingConfigurationSource) ||
                    ((configurationSource == existingConfigurationSource) && !canOverrideSameSource))
                {
                    return(false);
                }

                if (value == null)
                {
                    var removed = Metadata.RemoveAnnotation(name);
                    Debug.Assert(removed == existingAnnotation);
                }
                else
                {
                    Metadata.SetAnnotation(name, value, configurationSource);
                }

                return(true);
            }

            if (value != null)
            {
                Metadata.AddAnnotation(name, value, configurationSource);
            }

            return(true);
        }