Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DatabaseConsoleWrapper"/> class.
        /// </summary>
        /// <param name="connectionString">The default connection string.</param>
        /// <param name="company">The company name.</param>
        /// <param name="appName">The application/domain name.</param>
        /// <param name="useBeefDbo">Indicates whether to use the standard BEEF <b>dbo</b> schema objects (defaults to <c>true</c>).</param>
        private DatabaseConsoleWrapper(string connectionString, string company, string appName, bool useBeefDbo = true)
        {
            ConnectionString = Check.NotEmpty(connectionString, nameof(connectionString));
            Company          = Check.NotEmpty(company, nameof(company));
            AppName          = Check.NotEmpty(appName, nameof(appName));

            if (useBeefDbo)
            {
                _assemblies.Add(typeof(DatabaseConsoleWrapper).Assembly);
                _schemaOrder.Add("dbo");
            }

            OverrideConnectionString();

            _exeDir = CodeGenFileManager.GetExeDirectory();
            _outDir = new DirectoryInfo(_exeDir).Parent.FullName;
        }
Пример #2
0
        /// <summary>
        /// Executes the underlying <see cref="DatabaseConsole"/> using the database tooling arguments.
        /// </summary>
        /// <param name="args">The code generation arguments.</param>
        /// <returns><b>Zero</b> indicates success; otherwise, unsucessful.</returns>
        public async Task <int> RunAsync(string[] args)
        {
            using var app = new CommandLineApplication()
                  {
                      Name        = "beef.database.core",
                      Description = "Business Entity Execution Framework (Beef) Database Tooling."
                  };

            var cmd = app.Argument <DatabaseExecutorCommand>("command", "Database command.").IsRequired();
            var sn  = app.Argument("parameters", "Additional parameters used by the ScriptNew command.", multipleValues: true);
            var cs  = app.Option("-cs|--connectionstring", "Override the database connection string.", CommandOptionType.SingleValue);
            var eo  = app.Option("-eo|--entry-assembly-only", "Override assemblies to use the entry assembly only.", CommandOptionType.NoValue);
            var x2y = app.Option("-x2y|--xmlToYaml", "Convert the XML configuration into YAML equivalent (will not codegen).", CommandOptionType.NoValue);
            var evn = app.Option("-evn|--environmentVariableName", "Override the default environment variable name for the connection string.", CommandOptionType.SingleValue);
            var ps  = app.Option("-p|--param", "Name=Value pair.", CommandOptionType.MultipleValue).Accepts(v => v.Use(new ParamsValidator()));
            var so  = app.Option("-s|--script", "Override the script resource name.", CommandOptionType.SingleValue);

            app.OnExecuteAsync(async(_) =>
            {
                if (x2y.HasValue())
                {
                    if (cmd.ParsedValue != DatabaseExecutorCommand.CodeGen)
                    {
                        throw new CommandParsingException(app, $"Command '{cmd.ParsedValue}' is not compatible with --xmlToYaml; the command must be '{DatabaseExecutorCommand.CodeGen}'.");
                    }

                    DatabaseConsole.WriteMasthead();
                    return(await CodeGenFileManager.ConvertXmlToYamlAsync(CommandType.Database, CodeGenFileManager.GetConfigFilename(_exeDir, CommandType.Database, Company, AppName)).ConfigureAwait(false));
                }

                var script = so.HasValue() ? so.Value() : _script;
                var sb     = new StringBuilder();
                if (eo.HasValue())
                {
                    sb.Append(ReplaceMoustache(CommandLineAssemblyTemplate, null !, null !, Assembly.GetEntryAssembly()?.FullName !, script !));
                }
                else
                {
                    _assemblies.ForEach(a => sb.Append(ReplaceMoustache(CommandLineAssemblyTemplate, null !, null !, a.FullName !, script !)));
                }

                var rargs = ReplaceMoustache(CommandLineTemplate, cmd.Value !, cs.Value() ?? ConnectionString, sb.ToString(), script !);

                for (int i = 0; i < sn.Values.Count; i++)
                {
                    rargs += $" -p Param{i}={sn.Values[i]}";
                }

                foreach (var p in ps.Values)
                {
                    rargs += $" -p {p}";
                }

                _schemaOrder.ForEach(so => rargs += $" -so {so}");

                return(await DatabaseConsole.Create().RunAsync(rargs).ConfigureAwait(false));
            });

            try
            {
                return(await app.ExecuteAsync(args).ConfigureAwait(false));
            }
            catch (CommandParsingException cpex)
            {
                Console.Error.WriteLine(cpex.Message);
                return(-1);
            }
        }