public SqlPreCommand SynchronizationScript(bool interactive = true, bool schemaOnly = false, string replaceDatabaseName = null) { OnBeforeDatabaseAccess(); if (Synchronizing == null) { return(null); } using (CultureInfoUtils.ChangeBothCultures(ForceCultureInfo)) using (ExecutionMode.Global()) { Replacements replacements = new Replacements() { Interactive = interactive, ReplaceDatabaseName = replaceDatabaseName, SchemaOnly = schemaOnly }; SqlPreCommand command = Synchronizing .GetInvocationListTyped() .Select(e => { try { return(e(replacements)); } catch (Exception ex) { return(new SqlPreCommandSimple("-- Exception on {0}.{1}\r\n{2}".FormatWith(e.Method.DeclaringType.Name, e.Method.Name, ex.Message.Indent(2, '-')))); } }) .Combine(Spacing.Triple); return(command); } }
public SqlPreCommand?SynchronizationScript(bool interactive = true, bool schemaOnly = false, string?replaceDatabaseName = null) { OnBeforeDatabaseAccess(); if (Synchronizing == null) { return(null); } using (CultureInfoUtils.ChangeBothCultures(ForceCultureInfo)) using (ExecutionMode.Global()) { Replacements replacements = new Replacements() { Interactive = interactive, ReplaceDatabaseName = replaceDatabaseName, SchemaOnly = schemaOnly }; SqlPreCommand?command = Synchronizing .GetInvocationListTyped() .Select(e => { try { SafeConsole.WriteColor(ConsoleColor.White, e.Method.DeclaringType !.TypeName()); Console.Write("."); SafeConsole.WriteColor(ConsoleColor.DarkGray, e.Method.MethodName()); Console.Write("..."); var result = e(replacements); if (result == null) { SafeConsole.WriteLineColor(ConsoleColor.Green, "OK"); } else { SafeConsole.WriteLineColor(ConsoleColor.Yellow, "Changes"); } return(result); } catch (Exception ex) { SafeConsole.WriteColor(ConsoleColor.Red, "Error"); SafeConsole.WriteLineColor(ConsoleColor.DarkRed, " (...it's probably ok, execute this script and try again)"); return(new SqlPreCommandSimple("-- Exception on {0}.{1}\r\n{2}".FormatWith(e.Method.DeclaringType !.Name, e.Method.Name, ex.Message.Indent(2, '-')))); } }) .Combine(Spacing.Triple); return(command); } }