Как вы уже догадались, они оба представляют одно и то же значение. Разница в форматировании; DirectoryEntry.NativeGUID
отображается в порядке с прямым порядком байтов (без черточек), как «изначально» хранится в службе каталогов, а UserPricipal.GUID/DirectoryEntry.GUID
отображается в порядке с прямым порядком байтов (с черточками). Подробности смотрите в статье в Википедии Endianess .
Поэтому, когда вы распечатываете значение для NativeGUID (строка), оно не должно показывать никаких штрихов (как в вашем примере), если вы не создадите новый GUID, используя строку в качестве ввода (Guid ng = new Guid(de.NativeGuid);
). Это создаст некоторую путаницу ...
Важно не смешивать их при сохранении GUID во внешнем источнике данных или при сохранении NativeGUID в качестве GUID с прямым порядком байтов.
Поэтому я бы выбрал UserPricipal.GUID / DirectoryEntry.GUID, потому что именно так отображается атрибут objectGUID с использованием большинства инструментов управления Windows (таких как «Пользователи и компьютеры Active Directory» и «Редактирование ADSI») и как он хранится и отображается в SQL. Сервер при использовании типа данных uniqueidentifier
. Также; вам нужно перейти «ниже» UserPrincipal (GetUnderlyingObject()
), чтобы получить значение NativeGUID (или преобразовать свойство UserPrincipal.GUID в little-endian).
Так что я думаю, вам придется решить, переносить ли ваши существующие «внешние» данные в GUID-формат или продолжать использовать NativeGUID-формат. Прямо сейчас я предполагаю, что вы где-то посередине.