use*_*987 5 c# sql-server dacpac
我正在使用 DacFX 在 SQL Server 数据库之间进行比较并创建脚本。
运行比较后,我会检查更改并排除一些由于内部功能引起的更改。
完成排除对象后,我运行SchemaComparisonResult.GetErrors()并打印出警告和错误。
有些错误是针对已排除的对象,我不想显示它们,因为它们不再相关。
有没有办法在不检查消息内容的情况下做到这一点,因为消息可能会有所不同,并且我无法在代码中引用所有内容
编辑:
我尝试通过两种方式进行排除:
运行前比较:
List<TSqlObject> sourceModel = TSqlModel.LoadFromDatabase(sourceConnectionStringBuilder.ConnectionString).GetObjects(DacQueryScopes.UserDefined).ToList();
List<TSqlObject> targetModel = TSqlModel.LoadFromDatabase(targetConnectionStringBuilder.ConnectionString).GetObjects(DacQueryScopes.UserDefined).ToList();
TSqlObject sourceObject;
TSqlObject targetObject;
foreach (var exclude in preExcludeProp)
{
sourceObject = sourceModel.FirstOrDefault(o => string.Join(".", o.Name.Parts) == exclude.ToString());
targetObject = targetModel.FirstOrDefault(o => string.Join(".", o.Name.Parts) == exclude.ToString());
if (sourceObject != null)
{
comparison.ExcludedSourceObjects.Add(new SchemaComparisonExcludedObjectId(sourceObject.ObjectType, new ObjectIdentifier(sourceObject.Name.Parts.ToArray())));
}
if (targetObject != null)
{
comparison.ExcludedTargetObjects.Add(new SchemaComparisonExcludedObjectId(targetObject.ObjectType, new ObjectIdentifier(targetObject.Name.Parts.ToArray())));
}
}
Run Code Online (Sandbox Code Playgroud)
运行比较后:
foreach (SchemaDifference diff in results.Differences)
{
string name = string.Join(".", (diff.SourceObject ?? diff.TargetObject).Name.Parts);
if (postExcludeProp.Contains(name))
{
results.Exclude(diff);
}
}
Run Code Online (Sandbox Code Playgroud)
两者的结果相同
比较:SchemaComparisonResult 结果 = Comparison.Compare();
获取错误:results.GetErrors()