Beispiel #1
0
        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);
        }
Beispiel #2
0
        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());
        }