创建联合视图类

联合视图类是源类实例的逻辑联合。 除非通过在源查询中包含 WHERE 子句来限制实例,否则联合视图类包括源类的所有实例。

如果你要查看位于不同命名空间或不同计算机上的类似或相同类的实例,联合视图类非常有用。 例如,你可以创建一个联合类,其中包含要监视的不同磁盘驱动器的实例。

还可以使联合视图类的属性基于所有源类实例中不存在的属性。 如果源类实例没有相同的属性,则联合类实例的属性值为 NULL。 例如,如果一个硬盘驱动器具有 temperature 属性,而另一个硬盘驱动器没有此属性,你仍可以在两者之间创建联合。

以下过程说明如何创建联合视图类。

创建联合视图类

  1. 使用 Union 字符串限定符开始类定义。

    限定符 JoinOn、Association 和 Union 互斥。

  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;
};