Создание класса представления объединения
Класс представления объединения — это логический союз экземпляров исходного класса. Класс объединённого представления включает все экземпляры исходных классов, если только вы не ограничите их с помощью добавления предложения WHERE в исходный запрос.
Классы представления объединения полезны, если требуется увидеть экземпляры похожих или идентичных классов, расположенных в разных пространствах имен или на разных компьютерах. Например, можно создать класс объединения, содержащий экземпляры различных дисков для мониторинга.
Вы также можете создать свойства класса представления объединения на свойствах, не присутствующих во всех экземплярах исходного класса. Если экземпляры исходного класса не имеют того же свойства, свойства экземпляров класса объединения имеют значение NULL. Например, если на одном жестком диске есть свойство температуры , а на другом его нет, вы всё равно можете создать объединение между двумя дисками.
В следующей процедуре описывается создание класса объединённого представления.
Чтобы создать класс представления объединения
Начните определение класса со строкового квалификатора Union.
JoinOn, ассоциацияи союз квалификаторы являются взаимоисключающими.
Создайте запросы, определяющие исходные классы, используемые в классе представления с помощью квалификатора ViewSources.
Определите имена и расположение пространств имен, в которых находятся исходные классы с помощью квалификатора ViewSpaces.
Определите свойства, которые сопоставляют свойства в исходных классах с квалификатором свойств PropertySources.
При необходимости можно пометить любой из свойств как принадлежащих к исходному классу с помощью квалификатора HiddenDefault.
Определите ключевые свойства исходных классов класса представления объединения.
Каждый исходный класс должен иметь одинаковое количество ключевых свойств, сопоставленных CIMType. Кроме того, ключи вашего класса представления объединения должны однозначно идентифицировать все исходные экземпляры. В некоторых случаях может потребоваться указать системные свойства, чтобы убедиться, что экземпляры уникальны. Например, если вы создаете представление из объединения двух идентичных классов в двух разных пространствах имен, можно включить свойство __Namespace в качестве ключа в классе представления, чтобы различать два экземпляра. При использовании двух аналогичных классов из одного пространства имен для создания представления можно использовать свойство __Class для различения двух. Переименуйте все системные свойства в представлении, чтобы избежать конфликта с системными свойствами класса представления.
Определите любые методы, которые вы хотите, используя квалификатор 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;
};