private DiscriminatorBuilder HasValue( InternalEntityTypeBuilder entityTypeBuilder, object value, ConfigurationSource configurationSource) { if (entityTypeBuilder == null) { return(null); } var baseEntityTypeBuilder = EntityTypeBuilder; if (!baseEntityTypeBuilder.Metadata.IsAssignableFrom(entityTypeBuilder.Metadata) && entityTypeBuilder.HasBaseType(baseEntityTypeBuilder.Metadata, configurationSource) == null) { throw new InvalidOperationException( CoreStrings.DiscriminatorEntityTypeNotDerived( entityTypeBuilder.Metadata.DisplayName(), baseEntityTypeBuilder.Metadata.DisplayName())); } if (configurationSource == ConfigurationSource.Explicit) { entityTypeBuilder.Metadata.SetDiscriminatorValue(value); } else { if (!entityTypeBuilder.CanSetAnnotation(CoreAnnotationNames.DiscriminatorValue, value, configurationSource)) { return(null); } entityTypeBuilder.Metadata.SetDiscriminatorValue(value, configurationSource == ConfigurationSource.DataAnnotation); } return(this); }