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);
            }