public ScaffoldingDto ScaffoldDatabase(string connectionString, string rootNamespace, string contextName) { var scaffUtils = new ScaffoldingUtilities(); var csharpUtils = new CSharpUtilities(); var provider = new SqlServerAnnotationProvider(); var customConfiguration = new CustomConfiguration(connectionString, contextName, rootNamespace, true); var entityTypeWriter = new EntityTypeWriter(csharpUtils); var dbContextWriter = new SingularDbContextWriter(scaffUtils, csharpUtils); var configurationFactory = new ConfigurationFactory(provider, csharpUtils, scaffUtils); var loggerFactory = new LoggerFactory(); var logger = loggerFactory.CreateLogger <SqlServerDatabaseModelFactory>(); var revEngeConfig = new ReverseEngineeringConfiguration { ConnectionString = connectionString }; var sqlScaffoldModelFactory = new SingularScaffoldingModelFactory(new LoggerFactory(), new SqlServerTypeMapper(), new SqlServerDatabaseModelFactory(logger), new CandidateNamingService()); var codeWriter = new StringBuilderCodeWriter(new FileSystemFileService(), dbContextWriter, entityTypeWriter); var generator = new ReverseEngineeringGenerator(sqlScaffoldModelFactory, configurationFactory, codeWriter); var metaModel = generator.GetMetadataModel(revEngeConfig); var modelConfiguration = configurationFactory.CreateModelConfiguration(metaModel, customConfiguration); var dbContextData = dbContextWriter.WriteCode(modelConfiguration); var scaffoldingDto = new ScaffoldingDto { DbContextSource = dbContextData, ModelSources = modelConfiguration.EntityConfigurations .Select(entityConfiguration => entityTypeWriter.WriteCode(entityConfiguration)) .ToImmutableList() }; return(scaffoldingDto); }
public string GetSchemaSource(string connectionString, string assemblyNamespace, bool withUsings = true) { var loggerFactory = new LoggerFactory().AddConsole(); var ssTypeMap = new Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerTypeMapper(); var ssDbFac = new SqlServerDatabaseModelFactory(loggerFactory: loggerFactory); var ssScaffoldFac = new SqlServerScaffoldingModelFactory( loggerFactory: loggerFactory, typeMapper: ssTypeMap, databaseModelFactory: ssDbFac ); var ssAnnotationProvider = new Microsoft.EntityFrameworkCore.Metadata.SqlServerAnnotationProvider(); var csUtils = new CSharpUtilities(); var scaffUtils = new ScaffoldingUtilities(); var confFac = new ConfigurationFactory( extensionsProvider: ssAnnotationProvider, cSharpUtilities: csUtils, scaffoldingUtilities: scaffUtils ); var fs = new InMemoryFileService(); var sb = new StringBuilderCodeWriter( fileService: fs, dbContextWriter: new DbContextWriter( scaffoldingUtilities: scaffUtils, cSharpUtilities: csUtils ), entityTypeWriter: new EntityTypeWriter(cSharpUtilities: csUtils, scaffoldingUtilities: scaffUtils) ); var rGen = new ReverseEngineeringGenerator( loggerFactory: loggerFactory, scaffoldingModelFactory: ssScaffoldFac, configurationFactory: confFac, codeWriter: sb ); var outputPath = @"C:\temp"; var programName = "Ctx"; var conf = new ReverseEngineeringConfiguration { ConnectionString = connectionString, ContextClassName = programName, ProjectPath = "na", ProjectRootNamespace = assemblyNamespace, OutputPath = outputPath }; var output = new StringBuilder(); var resFiles = rGen.GenerateAsync(conf); resFiles.Wait(); var ctx = CreateContext(fs.RetrieveFileContents(outputPath, programName + ".cs"), isLibrary: withUsings); Console.WriteLine("CreateContext", ctx); if (!withUsings) { ctx = StripHeaderLines(3, ctx); } else { output.Append(_refs); } output.Append(ctx); foreach (var fpath in resFiles.Result.EntityTypeFiles) { output.Append(StripHeaderLines(4, fs.RetrieveFileContents(outputPath, System.IO.Path.GetFileName(fpath)))); } return(output.ToString()); }