Из параметров сравнения схем я отменил выбор всех типов объектов:
Он все еще показывает мне различия в объектах схемы:
Я прокрутил большой список опций General, и никто из них не сделал этого:
Из параметров сравнения схем я отменил выбор всех типов объектов:
Он все еще показывает мне различия в объектах схемы:
Я прокрутил большой список опций General, и никто из них не сделал этого:
Я взломал его. Если вы сохраните сравнение, вы можете добавить это в файл:
<PropertyElementName>
<Name>Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSchema</Name>
<Value>ExcludedType</Value>
</PropertyElementName>
Вы увидите, где, когда вы его открываете. Этот параметр не находится в пользовательском интерфейсе, но, по-видимому, поддерживается.
щелкните правой кнопкой мыши на узлах верхнего уровня (Добавить, Изменить, Удалить), вы можете выбрать "Исключить все", чтобы снять отметку со всех элементов этого типа. Это, по крайней мере, быстро приведет вас к состоянию, где все не проверено.
Вы можете установить схему исключения в коде, запустив приведенный ниже файл как exe перед выполнением слияния схемы. Приведенному ниже коду необходим пакет nuget Microsoft.SqlServer.DacFx для добавления в ваш проект. Он принимает 2 параметра, один из которых - путь к файлу .scmp, а второй - строку схем, разделенных запятыми, для исключения. Он перезапишет предоставленный .scmp и исключит предоставленные вами имена схем.
Он по существу добавляет разделы XML в файл .scmp, что эквивалентно отмене проверки объектов в пользовательском интерфейсе и сохранению файла. (постоянное предпочтение)
Это выполнение exe может быть задачей в вашем конвейере выпуска VSTS (VSO), если вы хотите исключить объединение одной схемы во время развертывания.
using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.SqlServer.Dac.Compare;
namespace DatabaseSchemaMergeHelper
{
/// <summary>
/// Iterates through a supplied schema compare file and excludes objects belonging to a supplied list of schema
/// </summary>
class Program
{
/// <summary>
/// first argument is the scmp file to update, second argument is comma separated list of schemas to exclude
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
if (args.Length == 0) return;
var scmpFilePath = args[0];
var listOfSchemasToExclude = args[1].Split(',').ToList();
// load comparison from Schema Compare (.scmp) file
var comparison = new SchemaComparison(scmpFilePath);
var comparisonResult = comparison.Compare();
// find changes pertaining to objects belonging to the supplied schema exclusion list
var listOfDifferencesToExclude = new List<SchemaDifference>();
// add those objects to a list
foreach (SchemaDifference difference in comparisonResult.Differences)
{
if (difference.TargetObject != null &&
difference.TargetObject.Name != null &&
difference.TargetObject.Name.HasName &&
listOfSchemasToExclude.Contains(difference.TargetObject.Name.Parts[0], StringComparer.OrdinalIgnoreCase))
{
listOfDifferencesToExclude.Add(difference);
}
}
// add the needed exclusions to the .scmp file
foreach (var diff in listOfDifferencesToExclude)
{
if (diff.SourceObject != null)
{
var SourceExclusionObject = new SchemaComparisonExcludedObjectId(diff.SourceObject.ObjectType, diff.SourceObject.Name,
diff.Parent?.SourceObject.ObjectType, diff.Parent?.SourceObject.Name);
comparison.ExcludedSourceObjects.Add(SourceExclusionObject);
}
var TargetExclusionObject = new SchemaComparisonExcludedObjectId(diff.TargetObject.ObjectType, diff.TargetObject.Name,
diff.Parent?.TargetObject.ObjectType, diff.Parent?.TargetObject.Name);
comparison.ExcludedTargetObjects.Add(TargetExclusionObject);
}
// save the file, overwrites the existing scmp.
comparison.SaveToFile(scmpFilePath, true);
}
}
}