在 DacFX 中,我可以排除针对已排除对象的消息吗

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()