IDifferencer.CompareGraphs(Object, Object) 메서드

정의

두 그래프(아래에 정의됨)를 비교하고 차이를 반환합니다.

CompareGraphs의 결과는 원본을 얻기 위해 대상에 적용할 차이를 나타냅니다. (즉, target + diff => source)

SMO와 SFC를 모두 지원하기 위해 입력은 '개체' 형식으로 남습니다. 그러나 SqlSmoObject 또는 SfcObject만 허용합니다. 지정한 개체의 형식이 잘못된 경우 이 메서드는 InvalidArgumentException을 throw합니다.

두 그래프는 모든 수준에서 구조가 같으면 비교 가능한 그래프(즉, 형식이 동일함)라고 합니다. 즉, 각 노드의 자식 및 속성 형식이 동일합니다. 지정된 그래프와 비교할 수 없는 경우 이 메서드는 InvalidArgumentException을 throw합니다.

각 그래프의 노드에 동일한 ID(SMO 및 SFC 모두에서 Urn으로 표시됨)가 있는 경우 동일한 것으로 간주됩니다. 두 개의 동일한 노드가 모든 속성에 대해 동일한 값을 갖는 경우 동일한 노드라고 합니다(있는 자식은 무시).

비교하는 동안 이 서비스는 모든 관련 노드를 검사합니다. (노드 및 속성의 관련성은 도메인에 따라 다릅니다.) 양쪽에서 동일한 노드의 각 쌍에 대해 서비스는 모든 relevent 속성을 비교합니다. 노드가 동일하지 않으면 DiffType.Updated가 있는 DiffEntry가 결과에 추가됩니다. 그런 다음 자식이 비교됩니다.

자식이 원본에 표시되지만 대상에는 나타나지 않으면 DiffType.Created가 있는 DiffEntry가 DiffType.Deleted와 마찬가지로 결과에 추가됩니다.

Differencer는 만든 노드 또는 삭제된 노드의 자식(모든 수준)을 안내합니다. 자식 항목이 결과에 포함됩니다.

마지막으로, 동일한 자식의 각 쌍이 동등성을 검사합니다.

CompareGraphs()는 매우 큰 그래프로 확장되며 가능하면 전체 그래프를 메모리에 유지하지 않습니다. 이 서비스를 사용하는 애플리케이션에는 결과의 순서에 따라 달라지는 논리가 없어야 합니다. 이는 향후 구현이 추가 최적화를 위해 변경될 때 다를 수 있습니다.

현재 구현은 늦게 활성화된 방식으로 트리를 안내합니다. 결과 IEnumerator를 다시 설정하면 그래프가 다시 탐색될 수 있습니다.

결과 IDiffgram은 스레드로부터 안전하지 않습니다.

public Microsoft.SqlServer.Management.Sdk.Differencing.IDiffgram CompareGraphs(object source, object target);
abstract member CompareGraphs : obj * obj -> Microsoft.SqlServer.Management.Sdk.Differencing.IDiffgram
Public Function CompareGraphs (source As Object, target As Object) As IDiffgram

매개 변수

source
Object

비교할 원본 그래프의 루트 노드입니다.

target
Object

비교할 대상 그래프의 루트 노드입니다.

반품

적용 대상