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