C#SQL数据库列表上的自动模式比较和更新

C#SQL数据库列表上的自动模式比较和更新,c#,sql,database-schema,schema-compare,C#,Sql,Database Schema,Schema Compare,请问.Net中是否有任何库允许我传入2个连接字符串并进行架构比较和更新 我之所以需要它,是因为我维护了一个黄金数据库,可以为不同的客户部署到多个数据库。如果每次有DB更新时都需要从VS手动进行模式比较,则会花费很长时间 我计划循环遍历所有客户端连接字符串,并与golden数据库进行比较,然后自动更新它们 请提供建议,谢谢。Devart有一些支持命令行自动化的模式比较工具,可能可以做您需要的事情:这就是我所做的。一个非常简单的解决方案。所需的nuget库如下所示,请搜索并将其包含在项目中 <

请问.Net中是否有任何库允许我传入2个连接字符串并进行架构比较和更新

我之所以需要它,是因为我维护了一个黄金数据库,可以为不同的客户部署到多个数据库。如果每次有DB更新时都需要从VS手动进行模式比较,则会花费很长时间

我计划循环遍历所有客户端连接字符串,并与golden数据库进行比较,然后自动更新它们


请提供建议,谢谢。

Devart有一些支持命令行自动化的模式比较工具,可能可以做您需要的事情:

这就是我所做的。一个非常简单的解决方案。所需的nuget库如下所示,请搜索并将其包含在项目中

<package id="Microsoft.SqlServer.Dac" version="1.0.3" targetFramework="net45" />
<package id="Microsoft.SqlServer.DacFx.x86" version="130.3485.1" targetFramework="net45" />
于2017年11月3日编辑
我可能忘了提到,为了让它工作,您必须创建scmp文件并将其存储在目录中,在我的例子中是“C:\SchemaCompare\”。程序将拾取所有scmp文件并进行比较和更新。因此,如果将来需要比较其他数据库,只需创建scmp并保存在目录中。

使用dac工具,您可能可以从源代码生成DACPAC并将其应用于各种数据库,而不需要先进行架构比较。DACPAC是什么?它是一种可以与SQL server一起使用的包格式。它可以通过SqlPackage工具、managementstudio甚至visualstudio生成
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();
            }
        }
    }