다음을 통해 공유


유니온 뷰 클래스 만들기

유니언 뷰 클래스는 소스 클래스 인스턴스의 논리적 합집합입니다. 원본 쿼리에 WHERE 절을 포함하여 인스턴스를 제한하지 않는 한 공용 구조체 뷰 클래스에는 원본 클래스의 모든 인스턴스가 포함됩니다.

공용 구조체 뷰 클래스는 서로 다른 네임스페이스 또는 다른 컴퓨터에 있는 유사하거나 동일한 클래스의 인스턴스를 확인하려는 경우에 유용합니다. 예를 들어 모니터링할 다른 디스크 드라이브의 인스턴스를 포함하는 공용 구조체 클래스를 만들 수 있습니다.

모든 원본 클래스 인스턴스에 없는 속성에 기반하여 공용 뷰 클래스의 속성을 정의할 수도 있습니다. 원본 클래스 인스턴스에 동일한 속성이 없는 경우 공용 구조체 클래스 인스턴스의 속성 값은 NULL. 예를 들어, 한 하드 디스크 드라이브에 온도 속성이 있지만 다른 드라이브에는 해당 속성이 없는 경우에도 두 드라이브를 결합할 수 있습니다.

다음 절차에서는 유니온 뷰 클래스를 만드는 방법을 설명합니다.

통합 뷰 클래스를 만들려면

  1. Union 문자열 한정자를 사용하여 클래스 정의를 시작합니다.

    JoinOn, AssociationUnion 한정자는 함께 사용할 수 없습니다.

  2. ViewSources 한정자를 사용하여 뷰 클래스에 사용되는 소스 클래스를 정의하는 쿼리를 만듭니다.

  3. ViewSpaces 한정자를 사용하여 원본 클래스가 있는 네임스페이스의 이름과 위치를 정의합니다.

  4. PropertySources 한정자를 사용하여 원본 클래스의 속성에 매핑되는 속성을 정의합니다.

    필요한 경우 HiddenDefault 한정자를 사용하여 소스 클래스에 속하는 속성에 태그를 지정할 수 있습니다.

  5. 결합 뷰 클래스의 원본 클래스의 주요 속성을 정의합니다.

    각 소스 클래스에는 CIMType일치하는 키 속성 수가 동일해야 합니다. 또한 당신의 결합 뷰 클래스의 키는 모든 원본 인스턴스를 고유하게 식별해야 합니다. 경우에 따라 인스턴스가 고유하도록 시스템 속성을 지정해야 할 수 있습니다. 예를 들어 두 개의 서로 다른 네임스페이스에 있는 동일한 두 클래스의 합집합에서 뷰를 만드는 경우 __Namespace 속성을 뷰 클래스의 키로 포함하여 두 인스턴스를 구분할 수 있습니다. 동일한 네임스페이스에서 비슷한 두 클래스를 사용하여 보기를 만드는 경우 __Class 속성을 사용하여 둘을 구분할 수 있습니다. 뷰 클래스의 시스템 속성과 충돌하지 않도록 보기의 시스템 속성 이름을 바꿉니다.

  6. MethodSource 한정자를 사용하여 원하는 메서드를 정의합니다.

    다른 뷰 클래스와 달리 공용 구조체 뷰를 수정하는 메서드를 만들 수 있습니다.

다음 코드 예제는 합집합 뷰 클래스를 다룹니다.

[Union, ViewSources{"SELECT Description, DeviceID, __Namespace, FileSystem, FreeSpace, VolumeName FROM LocalDisk", 
    "SELECT Description, DeviceID, __Namespace, FileSystem, FreeSpace, VolumeName FROM RemoteDisk"}, 
    ViewSpaces{"\\\\.\\Root\\LocalNamespace","\\\\.\\Root\\RemoteNamespace"}, 
    dynamic: ToInstance, provider("MS_VIEW_INSTANCE_PROVIDER")]

class UnionOfDrives

{
    [PropertySources{"Description", "Description"}] string des;
    [PropertySources{"DeviceID", "DeviceID"}, key] String did;
    [PropertySources{"__Namespace", "__Namespace"}, key] String KEYID;
    [PropertySources{"FileSystem", "FileSystem"}] String fsystem ;
    [PropertySources{"FreeSpace", "FreeSpace"}] uint64 fspace;
    [PropertySources{"VolumeName", "VolumeName"}] String vname;
};