Преобразование GUID в целое и обратно - PullRequest
3 голосов
/ 30 декабря 2008

, поэтому у меня есть стороннее приложение, с которым я должен взаимодействовать, этому приложению нужен идентификатор пользователя из моей таблицы пользователей. проблема заключается в том, что я храню свои идентификаторы пользователя как GUID, а стороннее приложение принимает только целое число. поэтому я считаю, что если есть способ преобразовать GUID в целое число, то я смогу преобразовать его обратно (когда я получаю сообщения от их сервера относительно userID), тогда мне не нужно слишком много перекодировать. есть идеи?

Ответы [ 6 ]

8 голосов
/ 31 декабря 2008

Вам понадобится сохранить отображение из вашего Guid в целое число третьей стороны: либо новое поле «int thirdPartyId» в существующей пользовательской таблице, либо новая таблица.

8 голосов
/ 31 декабря 2008

Целое число использует 32 бита, в то время как GUID составляет 128 битов, поэтому невозможно преобразовать GUID в целое число без потери информации, поэтому вы не можете преобразовать его обратно.

РЕДАКТИРОВАТЬ: возможно, вы можете сохранить GUID в таблице GUID, где вы назначаете каждому уникальный целочисленный ID. Таким образом, вы можете получить GUID обратно с целочисленным идентификатором.

4 голосов
/ 31 декабря 2008

Вам потребуется 128-битный целочисленный тип для хранения эквивалента GUID. Вы можете использовать метод ToByteArray () Guid для получения байтов и конструктор, который принимает массив байтов для восстановления Guid.

Вы также можете использовать метод GetHashCode (), чтобы получить целое число, но два разных идентификатора GUID могут иметь одинаковый хэш-код, поскольку существует больше возможных Guids, чем 32-разрядных целых.

2 голосов
/ 31 декабря 2008

Guid намного больше, чем целое число, и не может вписаться в целое число.

0 голосов
/ 06 марта 2009

Создать новую таблицу (MyUserMappings) с двумя столбцами

1) ThirdPartyUserID (INT, НЕ NULL, IDENTITY (1,1))

2) MyUserID (GUID, NOTNULL)

Вставьте все GUID из вашего UserID в эту таблицу, выполнив

ВСТАВИТЬ В MyUserMappings (MyUserID) ВЫБЕРИТЕ MyGUIDUserID ИЗ MyUsers

Вам также необходимо поместить триггер в таблицу MyUsers для вставки новой строки в таблицу MyUsersMappings каждый раз, когда ваша таблица MyUsers получает новую строку.

Теперь создайте представление, отображающее все поля из таблицы MyUsers и поля UserID ThirdParty из таблицы MyUsermappings.

Теперь вам не потребуется вносить изменения в DAL в существующее приложение, и исходная таблица не изменится. Таким образом, ваше существующее приложение останется без изменений. И ваш новый код может запросить представление вместо таблицы, чтобы вернуть Integer ID и всю другую информацию о пользователе.

Приветствие.

0 голосов
/ 31 декабря 2008

Добавьте столбец с целочисленной идентификацией, который в основном будет вторым столбцом идентификатора , и передайте этот столбец ID приложению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...