public virtual InternalKeyBuilder Key([CanBeNull] IReadOnlyList <Property> properties, ConfigurationSource configurationSource) { if (properties == null || !properties.Any()) { return(null); } foreach (var property in properties) { _propertyBuilders.UpdateConfigurationSource(property, configurationSource); } return(_keyBuilders.GetOrAdd( () => Metadata.FindKey(properties), () => Metadata.AddKey(properties), key => new InternalKeyBuilder(key, ModelBuilder), ModelBuilder.ConventionDispatcher.OnKeyAdded, configurationSource)); }