private async Task <int> RunAsync(IProgress <string> progress, CancellationToken ct) { var project = _dbSessionProvider.Value.Project; var dbSessionProvider = _dbSessionProvider.Value.TypeSymbol; var input = dbSessionProvider.GetDbInitInput(_codeContext.Compilation); var showLog = _showDbLog.Value; var tableNames = new string[DataSet.Count]; for (int i = 0; i < DataSet.Count; i++) { tableNames[i] = _.DbTableProperty[i].Name; } var outputDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); Directory.CreateDirectory(outputDir); var runner = DbInitProjectRunner.CreateDataSetGen(project, dbSessionProvider, input, _showDbLog.Value, tableNames, outputDir, _dte); var result = await runner.RunAsync(progress, ct); if (result != ExitCodes.Succeeded) { DeleteDirectoryIfExists(outputDir); return(result); } for (int i = 0; i < DataSet.Count; i++) { var dbTable = _.DbTableProperty[i].Name; _.ReferencedTypes[i] = File.ReadAllText(Path.Combine(outputDir, dbTable + ".types")); _.DataSetMethodBody[i] = File.ReadAllText(Path.Combine(outputDir, dbTable + ".statements")); } DeleteDirectoryIfExists(outputDir); var document = await DbInitMapper.GenerateDataSetsAsync(_codeContext, DataSet, ct); var workspace = project.Solution.Workspace; workspace.TryApplyChanges(document.Project.Solution); return(ExitCodes.Succeeded); }
public Presenter(DataSetGenWindow window, CodeContext codeContext, EnvDTE.DTE dte) { _window = window; _codeContext = codeContext; _dte = dte; _dbSessionProvider = NewScalar <TypeSymbolEntry>().AddValidator(ValidateNotEmpty); _showDbLog = NewScalar <bool>(); _dbSessionProviderTypes = GetDbSessionProviderTypes().ToArray(); if (_dbSessionProviderTypes.Length == 1) { _dbSessionProvider.Value = _dbSessionProviderTypes[0]; } var dataSet = DbInitMapper.GetDataSetEntries(codeContext); Show(_window._dataView, dataSet); }