private void GenerateKey(IKey key, IEntityType entityType, bool useDataAnnotations) { if (key == null) { var line = new List <string> { $".{nameof(EntityTypeBuilder.HasNoKey)}()" }; this.AppendMultiLineFluentApi(entityType, line); return; } var annotations = key.GetAnnotations().ToList(); var explicitName = key.GetName() != key.GetDefaultName(); RemoveAnnotation(ref annotations, RelationalAnnotationNames.Name); if (key.Properties.Count == 1 && annotations.Count == 0) { if (key is Key concreteKey && key.Properties.SequenceEqual( KeyDiscoveryConvention.DiscoverKeyProperties( concreteKey.DeclaringEntityType, concreteKey.DeclaringEntityType.GetProperties()))) { return; } if (!explicitName && useDataAnnotations) { return; } } var lines = new List <string> { $".{nameof(EntityTypeBuilder.HasKey)}(e => {GenerateLambdaToKey(key.Properties, "e")})" }; if (explicitName) { lines.Add( $".{nameof(RelationalKeyBuilderExtensions.HasName)}" + $"({this._code.Literal(key.GetName())})"); } var annotationsToRemove = new List <IAnnotation>(); foreach (var annotation in annotations) { if (annotation.Value == null || this._annotationCodeGenerator.IsHandledByConvention(key, annotation)) { annotationsToRemove.Add(annotation); } else { var methodCall = this._annotationCodeGenerator.GenerateFluentApi(key, annotation); if (methodCall != null) { lines.Add(this._code.Fragment(methodCall)); annotationsToRemove.Add(annotation); } } } lines.AddRange(this.GenerateAnnotations(annotations.Except(annotationsToRemove))); this.AppendMultiLineFluentApi(key.DeclaringEntityType, lines); }
private void GenerateKey(IKey key, IEntityType entityType, bool useDataAnnotations, IndentedStringBuilder sb) { if (key == null) { if (!useDataAnnotations) { var line = new List <string> { $".{nameof(EntityTypeBuilder.HasNoKey)}()" }; AppendMultiLineFluentApi(entityType, line, sb); } return; } var annotations = AnnotationCodeGenerator .FilterIgnoredAnnotations(key.GetAnnotations()) .ToDictionary(a => a.Name, a => a); AnnotationCodeGenerator.RemoveAnnotationsHandledByConventions(key, annotations); var explicitName = key.GetName() != key.GetDefaultName(); annotations.Remove(RelationalAnnotationNames.Name); if (key.Properties.Count == 1 && annotations.Count == 0) { if (key is Key concreteKey && key.Properties.SequenceEqual( KeyDiscoveryConvention.DiscoverKeyProperties( concreteKey.DeclaringEntityType, concreteKey.DeclaringEntityType.GetProperties()))) { return; } if (!explicitName && useDataAnnotations) { return; } } var lines = new List <string> { $".{nameof(EntityTypeBuilder.HasKey)}(e => {GenerateLambdaToKey(key.Properties, "e", EntityTypeTransformationService.TransformPropertyName)})" }; if (explicitName) { lines.Add( $".{nameof(RelationalKeyBuilderExtensions.HasName)}" + $"({CSharpHelper.Literal(key.GetName())})"); } lines.AddRange( AnnotationCodeGenerator.GenerateFluentApiCalls(key, annotations).Select(m => CSharpHelper.Fragment(m)) .Concat(GenerateAnnotations(annotations.Values))); AppendMultiLineFluentApi(key.DeclaringEntityType, lines, sb); }
/// <summary> /// Returns the key constraint name for this key for a particular table. /// </summary> /// <param name="key"> The key. </param> /// <param name="storeObject"> The identifier of the containing store object. </param> /// <returns> The key constraint name for this key. </returns> public static string GetName([NotNull] this IKey key, StoreObjectIdentifier storeObject) => (string)key[RelationalAnnotationNames.Name] ?? key.GetDefaultName(storeObject);
/// <summary> /// Returns the key constraint name for this key. /// </summary> /// <param name="key"> The key. </param> /// <returns> The key constraint name for this key. </returns> public static string GetName([NotNull] this IKey key) => (string)key[RelationalAnnotationNames.Name] ?? key.GetDefaultName();
/// <summary> /// Returns the key constraint name for this key for a particular table. /// </summary> /// <param name="key"> The key. </param> /// <param name="tableName"> The table name. </param> /// <param name="schema"> The schema. </param> /// <returns> The key constraint name for this key. </returns> public static string GetName( [NotNull] this IKey key, [NotNull] string tableName, [CanBeNull] string schema) => (string)key[RelationalAnnotationNames.Name] ?? key.GetDefaultName(tableName, schema);