/// <summary> /// Generates code for an <see cref="IKey" />. /// </summary> /// <param name="builderName"> The name of the builder variable. </param> /// <param name="key"> The key. </param> /// <param name="stringBuilder"> The builder code is added to. </param> /// <param name="primary">A value indicating whether the key is primary. </param> protected virtual void GenerateKey( [NotNull] string builderName, [NotNull] IKey key, [NotNull] IndentedStringBuilder stringBuilder, bool primary = false) { Check.NotNull(builderName, nameof(builderName)); Check.NotNull(key, nameof(key)); Check.NotNull(stringBuilder, nameof(stringBuilder)); stringBuilder .AppendLine() .AppendLine() .Append(builderName) .Append(primary ? ".HasKey(" : ".HasAlternateKey(") .Append(string.Join(", ", key.Properties.Select(p => Code.Literal(p.Name)))) .Append(")"); using (stringBuilder.Indent()) { var annotations = key.GetAnnotations().ToList(); GenerateFluentApiForAnnotation(ref annotations, RelationalAnnotationNames.Name, nameof(RelationalKeyBuilderExtensions.HasName), stringBuilder); GenerateAnnotations(annotations, stringBuilder); } stringBuilder.Append(";"); }
protected virtual void GenerateKey( [NotNull] IKey key, [NotNull] IndentedStringBuilder stringBuilder, bool primary = false) { Check.NotNull(stringBuilder, nameof(stringBuilder)); stringBuilder .AppendLine() .AppendLine() .Append(primary ? "b.HasKey(" : "b.HasAlternateKey(") .Append(string.Join(", ", key.Properties.Select(p => _code.Literal(p.Name)))) .Append(")"); using (stringBuilder.Indent()) { GenerateAnnotations(key.GetAnnotations().ToArray(), stringBuilder); } stringBuilder.Append(";"); }
private void KeyCreator(IKey key, string filePath, string entityClassName) { string file = null; using (var sr = new StreamReader("./CodeTemplates/KeyTemplate.txt")) { file = sr.ReadToEnd(); } var className = KeyListFormatter.GetNameOfKey(key); var fileText = Smart.Format(file, new { Namespace = namespaceString, EntityClassName = entityClassName, ClassName = className, Annotations = key.GetAnnotations(), DeclaringEntityType = EntityListFormatter.GetNameOfIEntityType(key.DeclaringEntityType), Properties = key.Properties }); File.WriteAllText($"{filePath}/{className}.cs", fileText); }
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); }
private void GenerateKey(IKey key, bool useDataAnnotations) { if (key == null) { return; } var annotations = key.GetAnnotations().ToList(); var explicitName = key.Relational().Name != ConstraintNamer.GetDefaultName(key); RemoveAnnotation(ref annotations, RelationalAnnotationNames.Name); if (key.Properties.Count == 1 && annotations.Count == 0) { if (key is Key concreteKey && key.Properties.SequenceEqual( new KeyDiscoveryConvention(null).DiscoverKeyProperties( concreteKey.DeclaringEntityType, concreteKey.DeclaringEntityType.GetProperties().ToList()))) { 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)}" + $"({_code.Literal(key.Relational().Name)})"); } var annotationsToRemove = new List <IAnnotation>(); foreach (var annotation in annotations) { if (_annotationCodeGenerator.IsHandledByConvention(key, annotation)) { annotationsToRemove.Add(annotation); } else { var methodCall = _annotationCodeGenerator.GenerateFluentApi(key, annotation); var line = methodCall == null #pragma warning disable CS0618 // Type or member is obsolete ? _annotationCodeGenerator.GenerateFluentApi(key, annotation, Language) #pragma warning restore CS0618 // Type or member is obsolete : _code.Fragment(methodCall); if (line != null) { lines.Add(line); annotationsToRemove.Add(annotation); } } } lines.AddRange(GenerateAnnotations(annotations.Except(annotationsToRemove))); AppendMultiLineFluentApi(key.DeclaringEntityType, lines); }
private void GenerateKey(IKey key, bool useDataAnnotations, IndentedStringBuilder sb) { if (key == null) { return; } var annotations = key.GetAnnotations().ToList(); var explicitName = key.Relational().Name != ConstraintNamer.GetDefaultName(key); RemoveAnnotation(ref annotations, RelationalAnnotationNames.Name); if (key.Properties.Count == 1) { if (key is Key concreteKey && key.Properties.SequenceEqual(new KeyDiscoveryConvention().DiscoverKeyProperties(concreteKey.DeclaringEntityType, concreteKey.DeclaringEntityType.GetProperties().ToList()))) { 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)}({CSharpUtilities.DelimitString(key.Relational().Name)})"); } var annotationsToRemove = new List <IAnnotation>(); foreach (var annotation in annotations) { if (_annotationCodeGenerator.IsHandledByConvention(key, annotation)) { annotationsToRemove.Add(annotation); } else { var line = _annotationCodeGenerator.GenerateFluentApi(key, annotation, Language); if (line != null) { lines.Add(line); annotationsToRemove.Add(annotation); } } } lines.AddRange(GenerateAnnotations(annotations.Except(annotationsToRemove))); AppendMultiLineFluentApi(key.DeclaringEntityType, lines, sb); }