/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected virtual void GenerateEntityTypeDataAnnotations(IEntityType entityType) { Check.NotNull(entityType, nameof(entityType)); GenerateKeylessAttribute(entityType); GenerateTableAttribute(entityType); GenerateIndexAttributes(entityType); var annotations = _annotationCodeGenerator .FilterIgnoredAnnotations(entityType.GetAnnotations()) .ToDictionary(a => a.Name, a => a); _annotationCodeGenerator.RemoveAnnotationsHandledByConventions(entityType, annotations); foreach (var attribute in _annotationCodeGenerator.GenerateDataAnnotationAttributes(entityType, annotations)) { var attributeWriter = new AttributeWriter(attribute.Type.Name); foreach (var argument in attribute.Arguments) { attributeWriter.AddParameter(_code.UnknownLiteral(argument)); } _sb.AppendLine(attributeWriter.ToString()); } }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected virtual void GenerateOnModelCreating( [NotNull] IModel model, bool useDataAnnotations) { Check.NotNull(model, nameof(model)); _sb.AppendLine("protected override void OnModelCreating(ModelBuilder modelBuilder)"); _sb.Append("{"); var annotations = _annotationCodeGenerator .FilterIgnoredAnnotations(model.GetAnnotations()) .ToDictionary(a => a.Name, a => a); _annotationCodeGenerator.RemoveAnnotationsHandledByConventions(model, annotations); annotations.Remove(CoreAnnotationNames.ProductVersion); annotations.Remove(RelationalAnnotationNames.MaxIdentifierLength); annotations.Remove(ScaffoldingAnnotationNames.DatabaseName); annotations.Remove(ScaffoldingAnnotationNames.EntityTypeErrors); var lines = new List <string>(); lines.AddRange( _annotationCodeGenerator.GenerateFluentApiCalls(model, annotations).Select(m => _code.Fragment(m)) .Concat(GenerateAnnotations(annotations.Values))); if (lines.Count > 0) { using (_sb.Indent()) { _sb.AppendLine(); _sb.Append("modelBuilder" + lines[0]); using (_sb.Indent()) { foreach (var line in lines.Skip(1)) { _sb.AppendLine(); _sb.Append(line); } } _sb.AppendLine(";"); } } using (_sb.Indent()) { foreach (var entityType in model.GetEntityTypes()) { _entityTypeBuilderInitialized = false; GenerateEntityType(entityType, useDataAnnotations); if (_entityTypeBuilderInitialized) { _sb.AppendLine("});"); } } foreach (var sequence in model.GetSequences()) { GenerateSequence(sequence); } } _sb.AppendLine(); using (_sb.Indent()) { _sb.AppendLine("OnModelCreatingPartial(modelBuilder);"); } _sb.AppendLine("}"); }