Example #1
0
        public async Task <object> Get(string connectionString, string databaseName, string workspaceDir, LibType libType)
        {
            await Task.Yield();

            try
            {
                var scaffolder    = new Scaffolder();
                var sourceBuilder = new SourceBuilder();
                var scriptBuilder = new ScriptGenerator();

                var @namespace  = libType == LibType.Assembly ? "GeneratedNamespace" : "System";
                var contextName = $"{databaseName}Context";

                var userFolder = Environment.GetEnvironmentVariable("LocalAppData");
                var appFolder  = $"{userFolder}\\SqlMapper";
                var directory  = new DirectoryInfo(appFolder);
                if (!directory.Exists)
                {
                    directory.Create();
                }
                var libraryPath = libType == LibType.Assembly ? $"{appFolder}\\generatedAssembly.dll" : $"{appFolder}\\generatedAssembly.csx";
                var scriptPath  = $"{workspaceDir}\\main.csx";

                var queryableExtensionsSource = File.ReadAllText($"{AppContext.BaseDirectory}/IQueryableExtensions.cs");
                var scaffolding = scaffolder.ScaffoldDatabase(connectionString, @namespace, contextName);
                scaffolding.AdditionalFiles.Add(queryableExtensionsSource);

                var libraryData            = sourceBuilder.Build(scaffolding.AllFiles, libType);
                var firstDbsetPropertyName = scriptBuilder.GetPropertyName(scaffolding.DbContextSource);
                var script = scriptBuilder.BuildMainScript(@namespace, contextName, libraryPath, firstDbsetPropertyName);

                File.WriteAllBytes(libraryPath, libraryData);
                File.WriteAllText(scriptPath, script);

                return(new { ScriptPath = scriptPath });
            }
#pragma warning disable 168
            catch (Exception ex)
#pragma warning restore 168
            {
                throw;
            }
        }