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