private int Scaffold( ScaffoldOptions settings, ScaffoldInterceptors?interceptors, string provider, string?providerLocation, string connectionString, string?additionalConnectionString, string output, bool overwrite) { using var dc = GetConnection(provider, providerLocation, connectionString, additionalConnectionString, out var secondaryConnection); using var sdc = secondaryConnection; if (dc == null) { return(StatusCodes.EXPECTED_ERROR); } var language = LanguageProviders.CSharp; var legacyProvider = new LegacySchemaProvider(dc, settings.Schema, language); ISchemaProvider schemaProvider = legacyProvider; ITypeMappingProvider typeMappingsProvider = legacyProvider; if (sdc != null) { var secondLegacyProvider = new LegacySchemaProvider(sdc, settings.Schema, language); schemaProvider = new MergedAccessSchemaProvider(legacyProvider, secondLegacyProvider); typeMappingsProvider = new AggregateTypeMappingsProvider(legacyProvider, secondLegacyProvider); } var generator = new Scaffolder(LanguageProviders.CSharp, HumanizerNameConverter.Instance, settings, interceptors); var dataModel = generator.LoadDataModel(schemaProvider, typeMappingsProvider); var sqlBuilder = dc.DataProvider.CreateSqlBuilder(dc.MappingSchema); var files = generator.GenerateCodeModel( sqlBuilder, dataModel, MetadataBuilders.GetAttributeBasedMetadataBuilder(generator.Language, sqlBuilder), SqlBoolEqualityConverter.Create(generator.Language)); var sourceCode = generator.GenerateSourceCode(files); Directory.CreateDirectory(output); for (var i = 0; i < sourceCode.Length; i++) { // TODO: add file name normalization/deduplication? var fileName = Path.Combine(output, sourceCode[i].FileName); if (File.Exists(fileName) && !overwrite) { Console.WriteLine($"File '{fileName}' already exists. Specify '--overwrite true' option if you want to ovrerwrite existing files"); return(StatusCodes.EXPECTED_ERROR); } File.WriteAllText(fileName, sourceCode[i].Code); } return(StatusCodes.SUCCESS); }