diff --git a/Directory.Build.props b/Directory.Build.props
index dc4bce2..a6626e5 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -5,7 +5,7 @@
SQL Schema Compare
https://github.com/TiCodeX/SQLSchemaCompare
TiCodeX
- 2026.5.1
+ 2026.6.1
true
true
enable
diff --git a/SQLSchemaCompare.CLI/Commands/CompareCommand.cs b/SQLSchemaCompare.CLI/Commands/CompareCommand.cs
index 8259380..7e031d3 100644
--- a/SQLSchemaCompare.CLI/Commands/CompareCommand.cs
+++ b/SQLSchemaCompare.CLI/Commands/CompareCommand.cs
@@ -24,7 +24,7 @@ protected override int Execute(CommandContext context, Options options, Cancella
projectService.Project.TargetProviderOptions.ConnectionString = options.TargetConnectionString;
}
- databaseCompareService.StartCompare();
+ databaseCompareService.StartCompare(false);
while (!taskService.CurrentTaskInfos.All(x => x.Status is TaskStatus.RanToCompletion or TaskStatus.Faulted or TaskStatus.Canceled))
{
diff --git a/SQLSchemaCompare.CLI/Commands/MonitorCommand.cs b/SQLSchemaCompare.CLI/Commands/MonitorCommand.cs
new file mode 100644
index 0000000..0c4e23e
--- /dev/null
+++ b/SQLSchemaCompare.CLI/Commands/MonitorCommand.cs
@@ -0,0 +1,117 @@
+namespace TiCodeX.SQLSchemaCompare.CLI.Commands;
+
+using System.Reflection;
+
+///
+/// The monitor command
+///
+internal class MonitorCommand(IProjectService projectService, ITaskService taskService, IDatabaseCompareService databaseCompareService, ILogger logger)
+ : Command
+{
+ ///
+ protected override int Execute(CommandContext context, Options options, CancellationToken cancellationToken)
+ {
+ projectService.NewProject(options.DatabaseType);
+ projectService.Project.SourceProviderOptions.UseConnectionString = true;
+ projectService.Project.SourceProviderOptions.ConnectionString = options.ConnectionString;
+ projectService.Project.TargetProviderOptions.UseConnectionString = true;
+ projectService.Project.TargetProviderOptions.ConnectionString = options.ConnectionString;
+
+ databaseCompareService.StartCompare(true);
+
+ while (!taskService.CurrentTaskInfos.All(x => x.Status is TaskStatus.RanToCompletion or TaskStatus.Faulted or TaskStatus.Canceled))
+ {
+ Thread.Sleep(200);
+ }
+
+ if (taskService.CurrentTaskInfos.Any(x => x.Status is TaskStatus.Faulted or TaskStatus.Canceled))
+ {
+ var exception = taskService.CurrentTaskInfos.FirstOrDefault(x => x.Status is TaskStatus.Faulted or TaskStatus.Canceled)?.Exception;
+ if (exception != null)
+ {
+ throw exception;
+ }
+
+ throw new InvalidOperationException("Unknown error during compare task");
+ }
+
+ File.WriteAllText(options.OutputFile, projectService.Project.Result.FullAlterScript);
+ logger.LogInformation("Compare completed successfully. Output written to {OutputFile}", options.OutputFile);
+
+ return 0;
+ }
+
+ ///
+ /// The options for the compare command
+ ///
+ internal sealed class Options : CommandSettings
+ {
+ ///
+ /// Gets the type of the database.
+ ///
+ [OptionGroup("Inline options")]
+ [CommandOption("--type ")]
+ [Description("The database type")]
+ public DatabaseType DatabaseType { get; init; } = (DatabaseType)(-1);
+
+ ///
+ /// Gets the connection string.
+ ///
+ [OptionGroup("Inline options")]
+ [CommandOption("--connection ")]
+ [Description("The connection string")]
+ public string ConnectionString { get; init; }
+
+ ///
+ /// Gets the output file.
+ ///
+ [OptionGroup("Common options")]
+ [CommandOption("-o|--output ")]
+ [Description("The output file")]
+ public string OutputFile { get; init; }
+
+ ///
+ public override ValidationResult Validate()
+ {
+ var hasDatabaseType = this.DatabaseType != (DatabaseType)(-1);
+ var hasConnectionString = !string.IsNullOrWhiteSpace(this.ConnectionString);
+ var hasOutputFile = !string.IsNullOrWhiteSpace(this.OutputFile);
+
+ if (!hasDatabaseType && !hasConnectionString && !hasOutputFile)
+ {
+ throw new ShowHelpException();
+ }
+
+ var missingOptions = new List();
+
+ if (!hasDatabaseType)
+ {
+ missingOptions.Add(GetLongName(nameof(this.DatabaseType)));
+ }
+
+ if (!hasConnectionString)
+ {
+ missingOptions.Add(GetLongName(nameof(this.ConnectionString)));
+ }
+
+ if (!hasOutputFile)
+ {
+ missingOptions.Add(GetLongName(nameof(this.OutputFile)));
+ }
+
+ if (missingOptions.Count > 0)
+ {
+ return ValidationResult.Error($"Missing required options: {string.Join(", ", missingOptions)}");
+ }
+
+ return ValidationResult.Success();
+
+ static string GetLongName(string propertyName)
+ {
+ var propertyInfo = typeof(Options).GetProperty(propertyName);
+ var commandOption = propertyInfo.GetCustomAttribute();
+ return $"--{commandOption.LongNames[0]}";
+ }
+ }
+ }
+}
diff --git a/SQLSchemaCompare.CLI/Program.cs b/SQLSchemaCompare.CLI/Program.cs
index 290b60b..81ef3b2 100644
--- a/SQLSchemaCompare.CLI/Program.cs
+++ b/SQLSchemaCompare.CLI/Program.cs
@@ -14,7 +14,10 @@ public static int Main(string[] args)
{
var services = new ServiceCollection()
.RegisterServices()
- .AddLogging();
+ .AddLogging(builder =>
+ {
+ builder.AddConsole();
+ });
using var registrar = new DependencyInjectionRegistrar(services);
@@ -27,6 +30,7 @@ public static int Main(string[] args)
config.SetHelpProvider(new CustomHelpProvider(config.Settings));
config.AddCommand("compare").WithDescription("Compare two databases.");
+ config.AddCommand("monitor").WithDescription("Monitor database changes.");
});
// When options are provided without a command name, default to 'compare'
diff --git a/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj b/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj
index de45a92..bc876b7 100644
--- a/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj
+++ b/SQLSchemaCompare.CLI/SQLSchemaCompare.CLI.csproj
@@ -20,13 +20,14 @@
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
-
+
diff --git a/SQLSchemaCompare.CLI/packages.lock.json b/SQLSchemaCompare.CLI/packages.lock.json
index 1f1fdb8..22e4827 100644
--- a/SQLSchemaCompare.CLI/packages.lock.json
+++ b/SQLSchemaCompare.CLI/packages.lock.json
@@ -2,6 +2,19 @@
"version": 1,
"dependencies": {
"net10.0": {
+ "Microsoft.Extensions.Logging.Console": {
+ "type": "Direct",
+ "requested": "[10.0.9, )",
+ "resolved": "10.0.9",
+ "contentHash": "WyZEG/O8jKqBOBF6/M6IJqiEyWFBUv6PDyzNoXDA0mBZwKtkuf7GiZ/0/8eU8OpLKKQL0O95oPOY1szrWIKofQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging.Configuration": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9"
+ }
+ },
"Neolution.CodeAnalysis": {
"type": "Direct",
"requested": "[3.3.0-beta.2, )",
@@ -14,11 +27,11 @@
},
"Spectre.Console": {
"type": "Direct",
- "requested": "[0.55.2, )",
- "resolved": "0.55.2",
- "contentHash": "yc0g12YJpmZHofGJLTQX02/uqfzJ6XHRx6pe9rANNjleQptXMHPxD9KI2/DWkXiJWddc+4oizEdGox15c89hhw==",
+ "requested": "[0.57.1, )",
+ "resolved": "0.57.1",
+ "contentHash": "h/B0CJLR5Ba8yq+iVjjZR9JXMS+8a1syHmHhyZ6w5m8rHDWLGOlaKAhzJanHJL62rZxynLeVOx+43MKvskJ1lA==",
"dependencies": {
- "Spectre.Console.Ansi": "0.55.2"
+ "Spectre.Console.Ansi": "0.57.1"
}
},
"Spectre.Console.Cli": {
@@ -32,11 +45,11 @@
},
"Spectre.Console.Cli.Extensions.DependencyInjection": {
"type": "Direct",
- "requested": "[0.25.0, )",
- "resolved": "0.25.0",
- "contentHash": "MVhVuErdBt9Lm10MboaJriu/7vf5+WpgQEQ2U/g7FMx3zF7WqRbM+KV0GSFsEgIWorgfTX/ke4akZ9rZd9644g==",
+ "requested": "[0.26.0, )",
+ "resolved": "0.26.0",
+ "contentHash": "wxE6ySq4kwcE48K+3CCHtzoIJG9xqedzT6Xb97eRodoGmQZIi/RqTlEAf/PykkpF3m0R1BsZBNgmXBpSa/qA4g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.8",
+ "Microsoft.Extensions.DependencyInjection": "10.0.9",
"Spectre.Console.Cli": "0.55.0"
}
},
@@ -103,120 +116,165 @@
},
"Microsoft.EntityFrameworkCore": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==",
+ "resolved": "10.0.9",
+ "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8",
- "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9",
+ "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA=="
+ "resolved": "10.0.9",
+ "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw=="
},
"Microsoft.EntityFrameworkCore.Analyzers": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg=="
+ "resolved": "10.0.9",
+ "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA=="
},
"Microsoft.EntityFrameworkCore.Relational": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==",
+ "resolved": "10.0.9",
+ "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==",
"dependencies": {
- "Microsoft.EntityFrameworkCore": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Configuration.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.SqlServer": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==",
+ "resolved": "10.0.9",
+ "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==",
"dependencies": {
"Microsoft.Data.SqlClient": "6.1.1",
- "Microsoft.EntityFrameworkCore.Relational": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Configuration.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Relational": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.Extensions.Caching.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "EoK2TwVR1daxmfXUPnvIYZSk5XQjHe45sGekox4kvMt88KQZQhDVzYW5Na5+oNwTuRpE48hipyGJg12F1Tm70w==",
+ "resolved": "10.0.9",
+ "contentHash": "5fGxcw2vuYp8s0wio9H1ECiuk4iKSdTIlNuigdLIrkhg+5XAwgFVDB/5Ots3pfN/QhABLYXutA79JFtnUKDSHA==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Caching.Memory": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "sYMYQjNprfqPTryuLNnr0/AOtnhlfuZ0ZxyOV0d3AXOEL8j9KV0EbelpZYyIatT2hJiaSGO9XGr5YDRsh22OfQ==",
+ "resolved": "10.0.9",
+ "contentHash": "G9mregdatGWMCQWeCw012LDeJVP7G/XIxH8Ddbjc8bD1//dA+8VVQdcRE9jI1moyoJxSSZhHITUnNQ8FUDl5+Q==",
"dependencies": {
- "Microsoft.Extensions.Caching.Abstractions": "10.0.8",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.8",
- "Microsoft.Extensions.Options": "10.0.8",
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Caching.Abstractions": "10.0.9",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "10.0.9",
+ "contentHash": "woZsWLhOQsASuxbmgiZJqiGUBNo3IjRdXC92xt8rRokza+P6/nIsnzq7sm9Or6ZYcRl2kL1ufj8HVzp1QlPTXw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "I63esIFbL3h5pSt7gXpXOlmcwDmYBUoYNEglKfDPFUqtYvSV84f2l28hO2lfVXsV0wdlplgAM7IVz16matapSg==",
+ "resolved": "10.0.9",
+ "contentHash": "qGhRPd3VxfLV9UqatVOiD9mAeUbj2KiMwGFYC5uXlzExiZQoe4X/hdmzGIU7BQjNLTqCnnbTHVyBglG3668/HA==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "10.0.9"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "10.0.9",
+ "contentHash": "Tp/+LPb70RyjjtLg9m5C959eP4KrUpJHThZfAegZVpsfmGvzfuNkuYbI/ft+LvXhMSyUcAeOPaN6rzTccwnZAg==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Configuration": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "daf62xHIrq8pnE709hgaZZN9tSam9TGGepWe1+bE6V3GEuVwJiMs6ib+38lfMCyAJAHiX0vapxBhsuMSV7U+cg==",
+ "resolved": "10.0.9",
+ "contentHash": "NijozhERJDIaJ4k5TSMy1jOi0cSC2HfkvRD/Sl+kGSSKgVbFnF4GxgtMN/MrzHB8D1JxIrD4xSer9Blh9v3axQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A=="
+ "resolved": "10.0.9",
+ "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA=="
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "K60JhWC2hN/Gi7TP68tBxSzk5ACWOs7lkmPzsfA8Bcf/IXTajujt2ORMf9rSMk1bsng6Lv4Y3fuxp3bm1+15ug==",
+ "resolved": "10.0.9",
+ "contentHash": "N7Gm9SjugYjmmnhwbBKC9DFqGqjfJvh6YfOJgtwh0AW0Xpok3dIVors1ik050XmUxKAgAc7nNngDIJyFb06K2g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.8",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.8",
- "Microsoft.Extensions.Options": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==",
+ "resolved": "10.0.9",
+ "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9"
+ }
+ },
+ "Microsoft.Extensions.Logging.Configuration": {
+ "type": "Transitive",
+ "resolved": "10.0.9",
+ "contentHash": "bUth5ip7YsZMXWZS42IRTI0zDrPEqdE+xnsmcL0Pk784grWKApDvc5UoMi2tP2qYJ5ylFzeVDuDu08sFATq1bg==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8"
+ "Microsoft.Extensions.Configuration": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Configuration.Binder": "10.0.9",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "10.0.9"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "VBD+131DpTNCNDfA4kIyKTiCySvJGNhwibdWBSdFRu7GMfXLXcXODkgA+KStKbbhzraLglZWUN4nXyHgW4JIRA==",
+ "resolved": "10.0.9",
+ "contentHash": "hyNdX4c2UwkRkzb9byw0H2DQkRzwBM3mzY2sCM9egwzTyg8dvQJmp5noQHGEaaCORQrNK3DD2gREBsc2DlXS4A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8",
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
+ }
+ },
+ "Microsoft.Extensions.Options.ConfigurationExtensions": {
+ "type": "Transitive",
+ "resolved": "10.0.9",
+ "contentHash": "Y4E24zffF/aPS0igNvY6ZzAQfbxd6AYdC9L4brnH+uK0yYYHIR6FeGVQVVjAOo8wub1EQDl2B90lCcpqoTF7Yw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Configuration.Binder": "10.0.9",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "OBPo4nYhMyIbtueoC10CBm6AGAbo/A9IV8QQ/6ryZS7VvmqpGT7hunazeHLxFawRzn3oLOq4jhqhpBX4tfswWQ=="
+ "resolved": "10.0.9",
+ "contentHash": "fmEbAUFsaIKirgLt/lYhuFRBwhcSJN31jjHgCdbQxJiWOum6EdLjkbgGuukSP9z/a+9LibaxII/kF+GwOXgC4g=="
},
"Microsoft.Identity.Client": {
"type": "Transitive",
@@ -288,17 +346,17 @@
},
"Microting.EntityFrameworkCore.MySql": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==",
+ "resolved": "10.0.9",
+ "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==",
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]",
- "MySqlConnector": "2.5.0"
+ "MySqlConnector": "2.6.0"
}
},
"MySqlConnector": {
"type": "Transitive",
- "resolved": "2.5.0",
- "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ==",
+ "resolved": "2.6.0",
+ "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
@@ -319,20 +377,20 @@
},
"Npgsql": {
"type": "Transitive",
- "resolved": "10.0.2",
- "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg==",
+ "resolved": "10.0.3",
+ "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0"
}
},
"Npgsql.EntityFrameworkCore.PostgreSQL": {
"type": "Transitive",
- "resolved": "10.0.1",
- "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==",
+ "resolved": "10.0.2",
+ "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==",
"dependencies": {
"Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)",
"Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)",
- "Npgsql": "10.0.2"
+ "Npgsql": "10.0.3"
}
},
"SonarAnalyzer.CSharp": {
@@ -342,8 +400,8 @@
},
"Spectre.Console.Ansi": {
"type": "Transitive",
- "resolved": "0.55.2",
- "contentHash": "tN3KEJQQZwLW9HJnG5YTSAxfBwxsmg1wVuGvhGG2rM+pbl+NGaHU8pDcNofPlOXlgpkbpBMxI5t9o9qPfy3sHQ=="
+ "resolved": "0.57.1",
+ "contentHash": "IFlXdGXOGD4XCK5ybZsXgQo7PE0ZE/pt9YFFWo2cECTipS8DrViLFazx+K00/A+fY1PlHYt1Vqwrjfod4EEckw=="
},
"StyleCop.Analyzers.Unstable": {
"type": "Transitive",
@@ -411,20 +469,20 @@
"TiCodeX.SQLSchemaCompare.Infrastructure": {
"type": "Project",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, )",
- "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.8, )",
- "Microting.EntityFrameworkCore.MySql": "[10.0.8, )",
- "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.1, )",
- "TiCodeX.SQLSchemaCompare.Services": "[2026.5.1, )"
+ "Microsoft.EntityFrameworkCore.Relational": "[10.0.9, )",
+ "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.9, )",
+ "Microting.EntityFrameworkCore.MySql": "[10.0.9, )",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.2, )",
+ "TiCodeX.SQLSchemaCompare.Services": "[2026.6.1, )"
}
},
"TiCodeX.SQLSchemaCompare.Services": {
"type": "Project",
"dependencies": {
"Microsoft.AspNet.WebApi.Client": "[6.0.0, )",
- "Microsoft.Extensions.Logging.Abstractions": "[10.0.8, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )",
"Newtonsoft.Json": "[13.0.4, )",
- "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )"
+ "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )"
}
}
},
diff --git a/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs b/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs
index 7758b59..7cbc726 100644
--- a/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs
+++ b/SQLSchemaCompare.Core/Interfaces/Services/IDatabaseCompareService.cs
@@ -8,5 +8,6 @@ public interface IDatabaseCompareService
///
/// Compares two databases
///
- void StartCompare();
+ /// Indicates whether to wait before retrieving the target database
+ void StartCompare(bool waitBeforeRetrieveTargetDatabase);
}
diff --git a/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs b/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs
index 3e3bae7..fe135dd 100644
--- a/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs
+++ b/SQLSchemaCompare.Infrastructure/DatabaseUtilities/DatabaseMapper.cs
@@ -3,13 +3,12 @@
///
/// Implements the database mapper functionality
///
-public class DatabaseMapper : IDatabaseMapper
+public class DatabaseMapper(ILogger logger) : IDatabaseMapper
{
///
public void PerformMapping(ABaseDb source, ABaseDb target, object mappingTable, TaskInfo taskInfo)
{
ArgumentNullException.ThrowIfNull(source);
-
ArgumentNullException.ThrowIfNull(target);
// Linearize the 2 databases for mapping
@@ -24,6 +23,7 @@ public void PerformMapping(ABaseDb source, ABaseDb target, object mappingTable,
new() { ObjectTitle = Localization.StatusMappingSequences, DbObjects = source.Sequences, MappableDbObjects = target.Sequences },
};
+ logger.LogInformation("Mapping source and target database objects...");
this.PerformMapping(maps, taskInfo);
}
diff --git a/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj b/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj
index d0ca1ab..573d10d 100644
--- a/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj
+++ b/SQLSchemaCompare.Infrastructure/SQLSchemaCompare.Infrastructure.csproj
@@ -5,14 +5,14 @@
-
-
-
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
-
+
diff --git a/SQLSchemaCompare.Infrastructure/packages.lock.json b/SQLSchemaCompare.Infrastructure/packages.lock.json
index 75615d8..6b6975c 100644
--- a/SQLSchemaCompare.Infrastructure/packages.lock.json
+++ b/SQLSchemaCompare.Infrastructure/packages.lock.json
@@ -4,37 +4,37 @@
"net10.0": {
"Microsoft.EntityFrameworkCore.Relational": {
"type": "Direct",
- "requested": "[10.0.8, )",
- "resolved": "10.0.8",
- "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==",
+ "requested": "[10.0.9, )",
+ "resolved": "10.0.9",
+ "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==",
"dependencies": {
- "Microsoft.EntityFrameworkCore": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Configuration.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.SqlServer": {
"type": "Direct",
- "requested": "[10.0.8, )",
- "resolved": "10.0.8",
- "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==",
+ "requested": "[10.0.9, )",
+ "resolved": "10.0.9",
+ "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==",
"dependencies": {
"Microsoft.Data.SqlClient": "6.1.1",
- "Microsoft.EntityFrameworkCore.Relational": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Configuration.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Relational": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microting.EntityFrameworkCore.MySql": {
"type": "Direct",
- "requested": "[10.0.8, )",
- "resolved": "10.0.8",
- "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==",
+ "requested": "[10.0.9, )",
+ "resolved": "10.0.9",
+ "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==",
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]",
- "MySqlConnector": "2.5.0"
+ "MySqlConnector": "2.6.0"
}
},
"Neolution.CodeAnalysis": {
@@ -49,13 +49,13 @@
},
"Npgsql.EntityFrameworkCore.PostgreSQL": {
"type": "Direct",
- "requested": "[10.0.1, )",
- "resolved": "10.0.1",
- "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==",
+ "requested": "[10.0.2, )",
+ "resolved": "10.0.2",
+ "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==",
"dependencies": {
"Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)",
"Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)",
- "Npgsql": "10.0.2"
+ "Npgsql": "10.0.3"
}
},
"Azure.Core": {
@@ -121,97 +121,97 @@
},
"Microsoft.EntityFrameworkCore": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==",
+ "resolved": "10.0.9",
+ "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8",
- "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9",
+ "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA=="
+ "resolved": "10.0.9",
+ "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw=="
},
"Microsoft.EntityFrameworkCore.Analyzers": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg=="
+ "resolved": "10.0.9",
+ "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA=="
},
"Microsoft.Extensions.Caching.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "EoK2TwVR1daxmfXUPnvIYZSk5XQjHe45sGekox4kvMt88KQZQhDVzYW5Na5+oNwTuRpE48hipyGJg12F1Tm70w==",
+ "resolved": "10.0.9",
+ "contentHash": "5fGxcw2vuYp8s0wio9H1ECiuk4iKSdTIlNuigdLIrkhg+5XAwgFVDB/5Ots3pfN/QhABLYXutA79JFtnUKDSHA==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Caching.Memory": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "sYMYQjNprfqPTryuLNnr0/AOtnhlfuZ0ZxyOV0d3AXOEL8j9KV0EbelpZYyIatT2hJiaSGO9XGr5YDRsh22OfQ==",
+ "resolved": "10.0.9",
+ "contentHash": "G9mregdatGWMCQWeCw012LDeJVP7G/XIxH8Ddbjc8bD1//dA+8VVQdcRE9jI1moyoJxSSZhHITUnNQ8FUDl5+Q==",
"dependencies": {
- "Microsoft.Extensions.Caching.Abstractions": "10.0.8",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.8",
- "Microsoft.Extensions.Options": "10.0.8",
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Caching.Abstractions": "10.0.9",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "I63esIFbL3h5pSt7gXpXOlmcwDmYBUoYNEglKfDPFUqtYvSV84f2l28hO2lfVXsV0wdlplgAM7IVz16matapSg==",
+ "resolved": "10.0.9",
+ "contentHash": "qGhRPd3VxfLV9UqatVOiD9mAeUbj2KiMwGFYC5uXlzExiZQoe4X/hdmzGIU7BQjNLTqCnnbTHVyBglG3668/HA==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "daf62xHIrq8pnE709hgaZZN9tSam9TGGepWe1+bE6V3GEuVwJiMs6ib+38lfMCyAJAHiX0vapxBhsuMSV7U+cg==",
+ "resolved": "10.0.9",
+ "contentHash": "NijozhERJDIaJ4k5TSMy1jOi0cSC2HfkvRD/Sl+kGSSKgVbFnF4GxgtMN/MrzHB8D1JxIrD4xSer9Blh9v3axQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A=="
+ "resolved": "10.0.9",
+ "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA=="
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "K60JhWC2hN/Gi7TP68tBxSzk5ACWOs7lkmPzsfA8Bcf/IXTajujt2ORMf9rSMk1bsng6Lv4Y3fuxp3bm1+15ug==",
+ "resolved": "10.0.9",
+ "contentHash": "N7Gm9SjugYjmmnhwbBKC9DFqGqjfJvh6YfOJgtwh0AW0Xpok3dIVors1ik050XmUxKAgAc7nNngDIJyFb06K2g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.8",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.8",
- "Microsoft.Extensions.Options": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==",
+ "resolved": "10.0.9",
+ "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "VBD+131DpTNCNDfA4kIyKTiCySvJGNhwibdWBSdFRu7GMfXLXcXODkgA+KStKbbhzraLglZWUN4nXyHgW4JIRA==",
+ "resolved": "10.0.9",
+ "contentHash": "hyNdX4c2UwkRkzb9byw0H2DQkRzwBM3mzY2sCM9egwzTyg8dvQJmp5noQHGEaaCORQrNK3DD2gREBsc2DlXS4A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8",
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "OBPo4nYhMyIbtueoC10CBm6AGAbo/A9IV8QQ/6ryZS7VvmqpGT7hunazeHLxFawRzn3oLOq4jhqhpBX4tfswWQ=="
+ "resolved": "10.0.9",
+ "contentHash": "fmEbAUFsaIKirgLt/lYhuFRBwhcSJN31jjHgCdbQxJiWOum6EdLjkbgGuukSP9z/a+9LibaxII/kF+GwOXgC4g=="
},
"Microsoft.Identity.Client": {
"type": "Transitive",
@@ -283,8 +283,8 @@
},
"MySqlConnector": {
"type": "Transitive",
- "resolved": "2.5.0",
- "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ==",
+ "resolved": "2.6.0",
+ "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
@@ -305,8 +305,8 @@
},
"Npgsql": {
"type": "Transitive",
- "resolved": "10.0.2",
- "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg==",
+ "resolved": "10.0.3",
+ "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0"
}
@@ -383,9 +383,9 @@
"type": "Project",
"dependencies": {
"Microsoft.AspNet.WebApi.Client": "[6.0.0, )",
- "Microsoft.Extensions.Logging.Abstractions": "[10.0.8, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )",
"Newtonsoft.Json": "[13.0.4, )",
- "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )"
+ "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )"
}
}
},
diff --git a/SQLSchemaCompare.Services/DatabaseCompareService.cs b/SQLSchemaCompare.Services/DatabaseCompareService.cs
index 5203e7d..7cd9929 100644
--- a/SQLSchemaCompare.Services/DatabaseCompareService.cs
+++ b/SQLSchemaCompare.Services/DatabaseCompareService.cs
@@ -83,13 +83,13 @@ public DatabaseCompareService(
}
///
- public void StartCompare()
+ public void StartCompare(bool waitBeforeRetrieveTargetDatabase)
{
- this.taskService.ExecuteTasks(
- [
- new TaskWork(
+ var tasks = new List
+ {
+ new(
new TaskInfo(Localization.LabelRetrieveSourceDatabase),
- true,
+ runInParallel: !waitBeforeRetrieveTargetDatabase,
taskInfo =>
{
this.retrievedSourceDatabase = this.databaseService.GetDatabase(
@@ -98,9 +98,24 @@ public void StartCompare()
this.databaseFilter.PerformFilter(this.retrievedSourceDatabase, this.projectService.Project.Options.Filtering);
return true;
}),
- new TaskWork(
+ };
+
+ if (waitBeforeRetrieveTargetDatabase)
+ {
+ tasks.Add(new(
+ new TaskInfo(string.Empty),
+ runInParallel: false,
+ taskInfo =>
+ {
+ this.logger.LogInformation("Make any database changes and press any key to compare...");
+ Console.ReadKey(true);
+ return true;
+ }));
+ }
+
+ tasks.Add(new(
new TaskInfo(Localization.LabelRetrieveTargetDatabase),
- true,
+ runInParallel: !waitBeforeRetrieveTargetDatabase,
taskInfo =>
{
this.retrievedTargetDatabase = this.databaseService.GetDatabase(
@@ -108,20 +123,22 @@ public void StartCompare()
this.retrievedTargetDatabase.Direction = CompareDirection.Target;
this.databaseFilter.PerformFilter(this.retrievedTargetDatabase, this.projectService.Project.Options.Filtering);
return true;
- }),
- new TaskWork(
+ }));
+
+ tasks.Add(new(
new TaskInfo(Localization.LabelMappingDatabaseObjects),
- false,
+ runInParallel: false,
taskInfo =>
{
this.databaseMapper.PerformMapping(this.retrievedSourceDatabase, this.retrievedTargetDatabase, null, taskInfo);
return true;
- }),
- new TaskWork(
+ }));
+ tasks.Add(new(
new TaskInfo(Localization.LabelDatabaseComparison),
- false,
- this.ExecuteDatabaseComparison),
- ]);
+ runInParallel: false,
+ this.ExecuteDatabaseComparison));
+
+ this.taskService.ExecuteTasks(tasks);
}
///
@@ -201,6 +218,8 @@ private bool ExecuteDatabaseComparison(TaskInfo taskInfo)
{
try
{
+ this.logger.LogInformation("Comparing...");
+
var processedItems = 1;
var scripter = this.databaseScripterFactory.Create(
this.retrievedSourceDatabase,
diff --git a/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj b/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj
index 2e05e03..eff7754 100644
--- a/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj
+++ b/SQLSchemaCompare.Services/SQLSchemaCompare.Services.csproj
@@ -8,7 +8,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/SQLSchemaCompare.Services/packages.lock.json b/SQLSchemaCompare.Services/packages.lock.json
index 914c0f0..ab169c4 100644
--- a/SQLSchemaCompare.Services/packages.lock.json
+++ b/SQLSchemaCompare.Services/packages.lock.json
@@ -14,11 +14,11 @@
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Direct",
- "requested": "[10.0.8, )",
- "resolved": "10.0.8",
- "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==",
+ "requested": "[10.0.9, )",
+ "resolved": "10.0.9",
+ "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9"
}
},
"Neolution.CodeAnalysis": {
@@ -39,8 +39,8 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A=="
+ "resolved": "10.0.9",
+ "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA=="
},
"Newtonsoft.Json.Bson": {
"type": "Transitive",
diff --git a/SQLSchemaCompare.Test/DatabaseFixture.cs b/SQLSchemaCompare.Test/DatabaseFixture.cs
index 0f458d0..7d811a4 100644
--- a/SQLSchemaCompare.Test/DatabaseFixture.cs
+++ b/SQLSchemaCompare.Test/DatabaseFixture.cs
@@ -396,10 +396,10 @@ internal void PerformCompareAndWaitResult(IProjectService projectService)
projectService,
new DatabaseService(new DatabaseProviderFactory(this.LoggerFactory, new CipherService())),
new DatabaseScripterFactory(this.LoggerFactory),
- new DatabaseMapper(),
+ new DatabaseMapper(this.LoggerFactory.CreateLogger()),
new DatabaseFilter(),
taskService);
- dbCompareService.StartCompare();
+ dbCompareService.StartCompare(false);
while (!taskService.CurrentTaskInfos.All(x => x.Status is TaskStatus.RanToCompletion or TaskStatus.Faulted or TaskStatus.Canceled))
{
diff --git a/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj b/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj
index a973897..79fc158 100644
--- a/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj
+++ b/SQLSchemaCompare.Test/SQLSchemaCompare.Test.csproj
@@ -16,10 +16,10 @@
-
+
-
+
all
diff --git a/SQLSchemaCompare.Test/packages.lock.json b/SQLSchemaCompare.Test/packages.lock.json
index d2b6165..d78e6b8 100644
--- a/SQLSchemaCompare.Test/packages.lock.json
+++ b/SQLSchemaCompare.Test/packages.lock.json
@@ -4,9 +4,9 @@
"net10.0": {
"EPPlus": {
"type": "Direct",
- "requested": "[8.5.4, )",
- "resolved": "8.5.4",
- "contentHash": "dHIYNqU4MDbkZPNyCF76bcQPSbx7/WhgDZw5hmDgGzRB1wn9+q/TMy4LC5gw00DamlqiWRnw4AVUXMdV1mGtOg==",
+ "requested": "[8.6.1, )",
+ "resolved": "8.6.1",
+ "contentHash": "ialCJVbku7pQ6Cf2qcdgVkynEkpdkx+6ryGpAu2n3Jlra//HY+0Fp54OM7ELRCE71id5qk55q3SMZgPGW1Pbbw==",
"dependencies": {
"EPPlus.Interfaces": "8.4.0",
"Microsoft.Extensions.Configuration.Json": "10.0.7",
@@ -30,12 +30,12 @@
},
"Microsoft.NET.Test.Sdk": {
"type": "Direct",
- "requested": "[18.5.1, )",
- "resolved": "18.5.1",
- "contentHash": "SfqVaLiIqAbRWuPg5BP4QFwBIirQj/YIL8Dhxl6zntBKbXp0cQykoV480SmwG+yRMiWptxEI6NbHQuGSZ8b97w==",
+ "requested": "[18.7.0, )",
+ "resolved": "18.7.0",
+ "contentHash": "49xH9j4UzCh2hMohJp53g3wUTvyycECw7CtVht4gfCz5ykudB1uBcF6D0TtgJPjCtP76UPW53bQElKdCeX+dUg==",
"dependencies": {
- "Microsoft.CodeCoverage": "18.5.1",
- "Microsoft.TestPlatform.TestHost": "18.5.1"
+ "Microsoft.CodeCoverage": "18.7.0",
+ "Microsoft.TestPlatform.TestHost": "18.7.0"
}
},
"Moq": {
@@ -131,8 +131,8 @@
},
"Microsoft.CodeCoverage": {
"type": "Transitive",
- "resolved": "18.5.1",
- "contentHash": "vMFDR1ZjqzzgKmM0zrPie7Gv9Y+ZppjODB5Quzu9Eq0TlIusUfUCYFPEawO91zQuqwzvdFbJSU7WHNtjStffJQ=="
+ "resolved": "18.7.0",
+ "contentHash": "+wFfx9s7D9wegM0RziXMj2kvYDT4qcqXXtyjiQwSZOGQ2wwcOAJQcD6eQXk02jt0MvRNawtp8TJxTrV+wD8X1g=="
},
"Microsoft.Data.SqlClient": {
"type": "Transitive",
@@ -158,66 +158,66 @@
},
"Microsoft.EntityFrameworkCore": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==",
+ "resolved": "10.0.9",
+ "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8",
- "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9",
+ "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA=="
+ "resolved": "10.0.9",
+ "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw=="
},
"Microsoft.EntityFrameworkCore.Analyzers": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg=="
+ "resolved": "10.0.9",
+ "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA=="
},
"Microsoft.EntityFrameworkCore.Relational": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==",
+ "resolved": "10.0.9",
+ "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==",
"dependencies": {
- "Microsoft.EntityFrameworkCore": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Configuration.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.SqlServer": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==",
+ "resolved": "10.0.9",
+ "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==",
"dependencies": {
"Microsoft.Data.SqlClient": "6.1.1",
- "Microsoft.EntityFrameworkCore.Relational": "10.0.8",
- "Microsoft.Extensions.Caching.Memory": "10.0.8",
- "Microsoft.Extensions.Configuration.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Relational": "10.0.9",
+ "Microsoft.Extensions.Caching.Memory": "10.0.9",
+ "Microsoft.Extensions.Configuration.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging": "10.0.9"
}
},
"Microsoft.Extensions.Caching.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "EoK2TwVR1daxmfXUPnvIYZSk5XQjHe45sGekox4kvMt88KQZQhDVzYW5Na5+oNwTuRpE48hipyGJg12F1Tm70w==",
+ "resolved": "10.0.9",
+ "contentHash": "5fGxcw2vuYp8s0wio9H1ECiuk4iKSdTIlNuigdLIrkhg+5XAwgFVDB/5Ots3pfN/QhABLYXutA79JFtnUKDSHA==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Caching.Memory": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "sYMYQjNprfqPTryuLNnr0/AOtnhlfuZ0ZxyOV0d3AXOEL8j9KV0EbelpZYyIatT2hJiaSGO9XGr5YDRsh22OfQ==",
+ "resolved": "10.0.9",
+ "contentHash": "G9mregdatGWMCQWeCw012LDeJVP7G/XIxH8Ddbjc8bD1//dA+8VVQdcRE9jI1moyoJxSSZhHITUnNQ8FUDl5+Q==",
"dependencies": {
- "Microsoft.Extensions.Caching.Abstractions": "10.0.8",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.8",
- "Microsoft.Extensions.Options": "10.0.8",
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Caching.Abstractions": "10.0.9",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Configuration": {
@@ -231,10 +231,10 @@
},
"Microsoft.Extensions.Configuration.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "I63esIFbL3h5pSt7gXpXOlmcwDmYBUoYNEglKfDPFUqtYvSV84f2l28hO2lfVXsV0wdlplgAM7IVz16matapSg==",
+ "resolved": "10.0.9",
+ "contentHash": "qGhRPd3VxfLV9UqatVOiD9mAeUbj2KiMwGFYC5uXlzExiZQoe4X/hdmzGIU7BQjNLTqCnnbTHVyBglG3668/HA==",
"dependencies": {
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Configuration.FileExtensions": {
@@ -262,16 +262,16 @@
},
"Microsoft.Extensions.DependencyInjection": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "daf62xHIrq8pnE709hgaZZN9tSam9TGGepWe1+bE6V3GEuVwJiMs6ib+38lfMCyAJAHiX0vapxBhsuMSV7U+cg==",
+ "resolved": "10.0.9",
+ "contentHash": "NijozhERJDIaJ4k5TSMy1jOi0cSC2HfkvRD/Sl+kGSSKgVbFnF4GxgtMN/MrzHB8D1JxIrD4xSer9Blh9v3axQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "21nbDV60SRPWGIivsyl6lqBeEJNG1sginhhfWgRrr3Ais7aQ12To25OAHQxgoiJkjqy1aQ6RxpZBGYuTi7Ge6A=="
+ "resolved": "10.0.9",
+ "contentHash": "g41l/30G3K4B/d/L8kjux0+30e27c8D0FVQ/PFCpbekgfDpj9mnDhieP67EqXWvl1EWNeZh2rpR4F5B/jcDOHA=="
},
"Microsoft.Extensions.FileProviders.Abstractions": {
"type": "Transitive",
@@ -298,35 +298,35 @@
},
"Microsoft.Extensions.Logging": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "K60JhWC2hN/Gi7TP68tBxSzk5ACWOs7lkmPzsfA8Bcf/IXTajujt2ORMf9rSMk1bsng6Lv4Y3fuxp3bm1+15ug==",
+ "resolved": "10.0.9",
+ "contentHash": "N7Gm9SjugYjmmnhwbBKC9DFqGqjfJvh6YfOJgtwh0AW0Xpok3dIVors1ik050XmUxKAgAc7nNngDIJyFb06K2g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.8",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.8",
- "Microsoft.Extensions.Options": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection": "10.0.9",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Options": "10.0.9"
}
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "fdVadZmsC8jRP0KvKy8mO8f6GV/HyBvElfcSxEhd+5FM5boAw/01iSaCto5G3G37ApJira4A3pNaVvBv8cUiLQ==",
+ "resolved": "10.0.9",
+ "contentHash": "9S/DFt4cohlMPpzIxjG6kk0L8MuN2vDm9pbMCulxtJzzk82oJHVLBd8vuQxaPskaYQwKqmFmbannf5eoChgjYg==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "VBD+131DpTNCNDfA4kIyKTiCySvJGNhwibdWBSdFRu7GMfXLXcXODkgA+KStKbbhzraLglZWUN4nXyHgW4JIRA==",
+ "resolved": "10.0.9",
+ "contentHash": "hyNdX4c2UwkRkzb9byw0H2DQkRzwBM3mzY2sCM9egwzTyg8dvQJmp5noQHGEaaCORQrNK3DD2gREBsc2DlXS4A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.8",
- "Microsoft.Extensions.Primitives": "10.0.8"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.9",
+ "Microsoft.Extensions.Primitives": "10.0.9"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "OBPo4nYhMyIbtueoC10CBm6AGAbo/A9IV8QQ/6ryZS7VvmqpGT7hunazeHLxFawRzn3oLOq4jhqhpBX4tfswWQ=="
+ "resolved": "10.0.9",
+ "contentHash": "fmEbAUFsaIKirgLt/lYhuFRBwhcSJN31jjHgCdbQxJiWOum6EdLjkbgGuukSP9z/a+9LibaxII/kF+GwOXgC4g=="
},
"Microsoft.Identity.Client": {
"type": "Transitive",
@@ -433,15 +433,15 @@
},
"Microsoft.TestPlatform.ObjectModel": {
"type": "Transitive",
- "resolved": "18.5.1",
- "contentHash": "KNZd+M0S0rz5eNAln0pbZX+A/RbokYZCbGKx4fN4CkhtWhkz6nSJDO+9LGYjRE4d0WPVriJ2JnVubkjt3+PpMg=="
+ "resolved": "18.7.0",
+ "contentHash": "6rmgU4q3/WOpOPcncI0YW0Q/QpcQtwR2TTEXDR5+4TfSimPBAk6Z/BgKLeGgp1SOun0ROVUCCafXhRLwsHaPpA=="
},
"Microsoft.TestPlatform.TestHost": {
"type": "Transitive",
- "resolved": "18.5.1",
- "contentHash": "RM+3JNHEoHOCFXzVntUcIiYxzPjzBN0N8wto6HYXi76YyBTZ/3CeRL8U+Pk5zx3AUrOmHxDvKJwGUCdElU9bJg==",
+ "resolved": "18.7.0",
+ "contentHash": "kYwfmebCs8992zaxEDkvG7S+YEouTeKfYVKUFEkwh1W2dIoOaevBt80XSKVXCUFEhusjOIm1sFfHBnoJgygrRA==",
"dependencies": {
- "Microsoft.TestPlatform.ObjectModel": "18.5.1",
+ "Microsoft.TestPlatform.ObjectModel": "18.7.0",
"Newtonsoft.Json": "13.0.3"
}
},
@@ -452,17 +452,17 @@
},
"Microting.EntityFrameworkCore.MySql": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==",
+ "resolved": "10.0.9",
+ "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==",
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]",
- "MySqlConnector": "2.5.0"
+ "MySqlConnector": "2.6.0"
}
},
"MySqlConnector": {
"type": "Transitive",
- "resolved": "2.5.0",
- "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ==",
+ "resolved": "2.6.0",
+ "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
"Microsoft.Extensions.Logging.Abstractions": "8.0.2"
@@ -483,20 +483,20 @@
},
"Npgsql": {
"type": "Transitive",
- "resolved": "10.0.2",
- "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg==",
+ "resolved": "10.0.3",
+ "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "10.0.0"
}
},
"Npgsql.EntityFrameworkCore.PostgreSQL": {
"type": "Transitive",
- "resolved": "10.0.1",
- "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==",
+ "resolved": "10.0.2",
+ "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==",
"dependencies": {
"Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)",
"Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)",
- "Npgsql": "10.0.2"
+ "Npgsql": "10.0.3"
}
},
"SonarAnalyzer.CSharp": {
@@ -645,20 +645,20 @@
"TiCodeX.SQLSchemaCompare.Infrastructure": {
"type": "Project",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, )",
- "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.8, )",
- "Microting.EntityFrameworkCore.MySql": "[10.0.8, )",
- "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.1, )",
- "TiCodeX.SQLSchemaCompare.Services": "[2026.5.1, )"
+ "Microsoft.EntityFrameworkCore.Relational": "[10.0.9, )",
+ "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.9, )",
+ "Microting.EntityFrameworkCore.MySql": "[10.0.9, )",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.2, )",
+ "TiCodeX.SQLSchemaCompare.Services": "[2026.6.1, )"
}
},
"TiCodeX.SQLSchemaCompare.Services": {
"type": "Project",
"dependencies": {
"Microsoft.AspNet.WebApi.Client": "[6.0.0, )",
- "Microsoft.Extensions.Logging.Abstractions": "[10.0.8, )",
+ "Microsoft.Extensions.Logging.Abstractions": "[10.0.9, )",
"Newtonsoft.Json": "[13.0.4, )",
- "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )"
+ "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )"
}
}
},
diff --git a/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs b/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs
index 75ea61c..73b0d47 100644
--- a/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs
+++ b/SQLSchemaCompare.UI/Pages/Project/ProjectPageModel.cshtml.cs
@@ -276,7 +276,7 @@ public ActionResult OnPostEditProject([FromBody] CompareProjectOptions options)
/// The ApiResponse in JSON
public ActionResult OnGetStartCompare()
{
- this.databaseCompareService.StartCompare();
+ this.databaseCompareService.StartCompare(false);
return new JsonResult(new ApiResponse());
}
diff --git a/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj b/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj
index e5be5ef..c8a6891 100644
--- a/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj
+++ b/SQLSchemaCompare.UI/SQLSchemaCompare.UI.csproj
@@ -44,8 +44,8 @@
-
-
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
diff --git a/SQLSchemaCompare.UI/packages.lock.json b/SQLSchemaCompare.UI/packages.lock.json
index dc79b81..25e151b 100644
--- a/SQLSchemaCompare.UI/packages.lock.json
+++ b/SQLSchemaCompare.UI/packages.lock.json
@@ -4,20 +4,20 @@
"net10.0": {
"Microsoft.AspNetCore.Mvc.NewtonsoftJson": {
"type": "Direct",
- "requested": "[10.0.8, )",
- "resolved": "10.0.8",
- "contentHash": "LAZmDrEsExc11l7nyQ+efQHTKp4MOskAuPSgkW64LoxrJv2YnElc4IM1VGfIHNRspqVguO5TY5kz2YTRcNSHeQ==",
+ "requested": "[10.0.9, )",
+ "resolved": "10.0.9",
+ "contentHash": "92fflUH1zefpjO7fnNJo3dpV0PQnvRpRcqR7ctlxnTumS1oQN8FRwRsruU/jW9PwWl/yYHOuFjuiHESzE4gY5g==",
"dependencies": {
- "Microsoft.AspNetCore.JsonPatch": "10.0.8",
+ "Microsoft.AspNetCore.JsonPatch": "10.0.9",
"Newtonsoft.Json": "13.0.3",
"Newtonsoft.Json.Bson": "1.0.2"
}
},
"Microsoft.Extensions.FileProviders.Embedded": {
"type": "Direct",
- "requested": "[10.0.8, )",
- "resolved": "10.0.8",
- "contentHash": "Wv9s0rmrmUEma268HCqqcHGgJI30O9mqMxnORZ/QFxtbjoTFEuMvnqL2kIfbZcOGD6XF6II47Hc6YSff0jKGkw=="
+ "requested": "[10.0.9, )",
+ "resolved": "10.0.9",
+ "contentHash": "UpRgjjSUmF7KYZTIv1Zd2Y0Wv2oK9jE+Jmyp4UMynTowjvJGG1yrRe2JodYyVgcDgZF2auGwYEl+U0J1+YhBRw=="
},
"Microsoft.TypeScript.MSBuild": {
"type": "Direct",
@@ -81,8 +81,8 @@
},
"Microsoft.AspNetCore.JsonPatch": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "xGMQwR06DxQSpSUdYvUPLQkjcQUAXnFIUbNoafAcLvUXDnmKNEuddxKvrGoWDT7svt90wWet2Xve5uacO/pVtw==",
+ "resolved": "10.0.9",
+ "contentHash": "XgN+a1F7kt4JOlwfiYSu6YMpK20QgIKebPE9QvrHogAX5A0jnqAG2E8I+Hh7/vu59+BrFKQ0UX6Ls7E80/O9IA==",
"dependencies": {
"Newtonsoft.Json": "13.0.3"
}
@@ -120,38 +120,38 @@
},
"Microsoft.EntityFrameworkCore": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "EJx+fIBMgBlgD+ublKCn+GTOJkw3UqV7xOjYWBRVdUYyIm8UfvAsmSOPFiIInsWTHyMEYUJ9gCJY1jwX+6UB7w==",
+ "resolved": "10.0.9",
+ "contentHash": "tu85SRzOT021V7EQlViCiAE7TqldVn469Y6lt5TEn/+XC4/MeNCHgMRSxqYuWqvF4zAQZUhCmtNEZuM3ss4LeA==",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Abstractions": "10.0.8",
- "Microsoft.EntityFrameworkCore.Analyzers": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Abstractions": "10.0.9",
+ "Microsoft.EntityFrameworkCore.Analyzers": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "jbKDXWPZQhuPHygMnwzNOqxBADVcpRVytcKYZsA++QqhPkpF93Ta8o5mbJQGrARSjlkr9WtOaADV97EDMOZ7DA=="
+ "resolved": "10.0.9",
+ "contentHash": "GRMaiPkqYna/gCsyDffYDWmefGPC3hDrdMw+2rrGcQwhs6uZOsaMQXMJnoXQ35tx9SkBV2ieRRU9N/jLOO6BZw=="
},
"Microsoft.EntityFrameworkCore.Analyzers": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "M3BZ8JH8rB6BE7dO2g9iVbrHLnEz9wMXT6q+tDR6Nq3gyP3KmBj5OTiZGxyF3vesjOQNKanYoPGSNBR4kR2llg=="
+ "resolved": "10.0.9",
+ "contentHash": "aiEFB+C5EsZGqxvMPazE07hbWsp4iPaufJpanGt5O+lrwv7mJLrqma5haVIgFAPCyhQkmk75XSCEubT1zUjxtA=="
},
"Microsoft.EntityFrameworkCore.Relational": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "UU3diAD2wwZveye2rnrwaF/wvJ9tm5iL2fuY9TTap6/iGQK1OO29M1BzXZRlRPVH/dByt5w/pISBSFtyR7hTqw==",
+ "resolved": "10.0.9",
+ "contentHash": "dEoyYKgiaZHHgOFm1WMWm1sFEsEuhPWufX4L9PekKtqd/RaIcPjkCjvbrVvJtApErb5wPSJhYvnTlxhH+p9h2g==",
"dependencies": {
- "Microsoft.EntityFrameworkCore": "10.0.8"
+ "Microsoft.EntityFrameworkCore": "10.0.9"
}
},
"Microsoft.EntityFrameworkCore.SqlServer": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "A+FLIsTH9l5DG2iD6QW6Mfwlvr+BjWme/jJ2hvwmmENTr7lR1UWmgCtKCjDYcHxqdAD15bb4PgQnSzw12DV/pw==",
+ "resolved": "10.0.9",
+ "contentHash": "wjgpB/UFSeMU3uMfMzD4so567vJi5UugE6iTcONBx+rPb/PWpjYlzYKyxm2pGAFNpTFNbqoirtt7uUCc97Tfiw==",
"dependencies": {
"Microsoft.Data.SqlClient": "6.1.1",
- "Microsoft.EntityFrameworkCore.Relational": "10.0.8"
+ "Microsoft.EntityFrameworkCore.Relational": "10.0.9"
}
},
"Microsoft.Identity.Client": {
@@ -224,17 +224,17 @@
},
"Microting.EntityFrameworkCore.MySql": {
"type": "Transitive",
- "resolved": "10.0.8",
- "contentHash": "vaxt+8dU7WODnxl5/2k4VH+LNgbQHk+yGIqWum619+6lICCmbLHyYyzqgJRGzic+Aeyh212TeH5fHklfXAjWVw==",
+ "resolved": "10.0.9",
+ "contentHash": "aLW8gEz8Tue1zLYycAJw0xeH5h3VSaHNGEplKFRMX56AeWm824kiMtqp8pOg4koReKY91W6Tbjswnj/RL7jewg==",
"dependencies": {
"Microsoft.EntityFrameworkCore.Relational": "[10.0.8, 10.0.999]",
- "MySqlConnector": "2.5.0"
+ "MySqlConnector": "2.6.0"
}
},
"MySqlConnector": {
"type": "Transitive",
- "resolved": "2.5.0",
- "contentHash": "hoAwfHHF8DlRRqwHOhN3u1KLi+XbX/4LPS7Anfa+SYC97vRyIfdEOEEfj1L50q01Ik8aDNvmDrNmu/VPFiAiaQ=="
+ "resolved": "2.6.0",
+ "contentHash": "YLceXhrEznpXf8XkwvH6JWHjAq0AA2lsf/zYWiESe4B9ki2v473XH2GRcPbLwktBqYu1Uy3Dvs7G+mu48QKL2w=="
},
"Newtonsoft.Json": {
"type": "Transitive",
@@ -259,17 +259,17 @@
},
"Npgsql": {
"type": "Transitive",
- "resolved": "10.0.2",
- "contentHash": "q5RfBI+wywJSFUNDE1L4ZbHEHCFTblo8Uf6A6oe4feOUFYiUQXyAf9GBh5qEZpvJaHiEbpBPkQumjEhXCJxdrg=="
+ "resolved": "10.0.3",
+ "contentHash": "7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w=="
},
"Npgsql.EntityFrameworkCore.PostgreSQL": {
"type": "Transitive",
- "resolved": "10.0.1",
- "contentHash": "P6EwH0Q4xkaA264iNZDqCPhWt8pscfUGxXazDQg4noBfqjoOlk4hKWfvBjF9ZX3R/9JybRmmJfmxr2iBMj0EpA==",
+ "resolved": "10.0.2",
+ "contentHash": "PsNYgPOSW41Xx19gin7y4EdZAPteWr9Cb01XkdObxOsPzi+mgBupBEN7J7+erXFsROPOILM7MlIoO9QzL8+LGQ==",
"dependencies": {
"Microsoft.EntityFrameworkCore": "[10.0.4, 11.0.0)",
"Microsoft.EntityFrameworkCore.Relational": "[10.0.4, 11.0.0)",
- "Npgsql": "10.0.2"
+ "Npgsql": "10.0.3"
}
},
"SonarAnalyzer.CSharp": {
@@ -336,11 +336,11 @@
"TiCodeX.SQLSchemaCompare.Infrastructure": {
"type": "Project",
"dependencies": {
- "Microsoft.EntityFrameworkCore.Relational": "[10.0.8, )",
- "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.8, )",
- "Microting.EntityFrameworkCore.MySql": "[10.0.8, )",
- "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.1, )",
- "TiCodeX.SQLSchemaCompare.Services": "[2026.5.1, )"
+ "Microsoft.EntityFrameworkCore.Relational": "[10.0.9, )",
+ "Microsoft.EntityFrameworkCore.SqlServer": "[10.0.9, )",
+ "Microting.EntityFrameworkCore.MySql": "[10.0.9, )",
+ "Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.2, )",
+ "TiCodeX.SQLSchemaCompare.Services": "[2026.6.1, )"
}
},
"TiCodeX.SQLSchemaCompare.Services": {
@@ -348,7 +348,7 @@
"dependencies": {
"Microsoft.AspNet.WebApi.Client": "[6.0.0, )",
"Newtonsoft.Json": "[13.0.4, )",
- "TiCodeX.SQLSchemaCompare.Core": "[2026.5.1, )"
+ "TiCodeX.SQLSchemaCompare.Core": "[2026.6.1, )"
}
}
},
diff --git a/SQLSchemaCompare/package.json b/SQLSchemaCompare/package.json
index 9dae9ac..8c7e404 100644
--- a/SQLSchemaCompare/package.json
+++ b/SQLSchemaCompare/package.json
@@ -1,6 +1,6 @@
{
"name": "sqlschemacompare",
- "version": "2026.5.1",
+ "version": "2026.6.1",
"license": "GPL-3.0-only",
"description": "The Swiss Army Knife of Database Schema Comparison for Microsoft SQL, mySQL and PostgreSQL which runs on Windows, Linux and macOS systems.",
"main": "app.js",