我是否知道.Net中是否有任何库允许我传入2个连接字符串并进行架构比较和更新?
我需要这个的原因是因为我维护了一个黄金数据库,可以为不同的客户部署到多个数据库。如果每次有DB更新时我需要手动从VS手动进行模式比较会耗费很长时间。
我计划循环遍历所有客户端连接字符串并与黄金数据库进行比较并自动更新它们。
请指教,谢谢。
答案 0 :(得分:1)
这就是我所做的。一个非常简单的解决方所需的nuget库如下所示,搜索并将它们包含在项目中。
<package id="Microsoft.SqlServer.Dac" version="1.0.3" targetFramework="net45" />
<package id="Microsoft.SqlServer.DacFx.x86" version="130.3485.1" targetFramework="net45" />
以下是示例代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Microsoft.SqlServer.Dac.Compare;
namespace SchemaComparer
{
class Program
{
//The directory where all the scmp files are located
const string schemaDirectory = "C:\SchemaCompare\\";
static void Main(string[] args)
{
//Loop thru all the scmp from the directory. This set to max 2 thread that run parallel and update together
Parallel.ForEach(Directory.GetFiles(schemaDirectory), new ParallelOptions { MaxDegreeOfParallelism = 2 }, (file) =>
{
try
{
// Load comparison from Schema Compare (.scmp) file
var comparison = new SchemaComparison(file);
Console.WriteLine("Processing " + Path.GetFileName(file));
Console.WriteLine("Comparing schema...");
SchemaComparisonResult comparisonResult = comparison.Compare();
// Publish the changes to the target database
Console.WriteLine("Publishing schema...");
SchemaComparePublishResult publishResult = comparisonResult.PublishChangesToTarget();
Console.WriteLine(publishResult.Success ? "Publish succeeded." : "Publish failed.");
Console.WriteLine(" ");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
});
Console.ReadLine();
}
}
}
2017年11月3日编辑 我可能忘了提到,为了使它能够工作,你必须创建scmp文件并将其存储在目录中,在我的例子中是“C:\ SchemaCompare \”。该程序将获取所有scmp文件并进行比较和更新。因此,如果您将来需要额外的数据库进行比较,只需创建scmp并保留在目录中。
答案 1 :(得分:0)
Devart拥有一些支持命令行自动化的架构比较工具,可能能够满足您的需求:https://www.devart.com/dbforge/sql/schemacompare/