Синтаксический анализ представления guid
Я использую сопоставление с помощью подхода кода и соглашения для генерации таблиц sqllite db на лету.
Свойство Id отображается так с помощью алгоритма Guid.Comb.
Id(x => x.Id, m => m.Generator(Generators.GuidComb));
Тесты вроде бы нормальные, кроме одной вещи, внутри моей таблицы БД свойство Id вставлено в таком формате X'0A16BBC77771594D9990A166014C54F6'
,
Мне интересно, почему сохраняется таким образом, а не в формате, как aaaef973-d8ce-4c92-95b4-3635bb2d42d5
и как я могу разобрать это представление guid X'0A16BBC77771594D9990A166014C54F6'
Спасибо
ОБНОВЛЕНИЕ: благодаря ответам ниже я попробовал как следующее
Guid id = Guid.ParseExact("X'0A16BBC77771594D9990A166014C54F6'", "N");
теперь я получаю эту ошибку
Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Мне не нужно строковое представление Guid, я хочу использовать его в качестве идентификатора при запросе базы данных, как p = session.Get<Permission>(id);
2 ответа
Вы можете создать гид, используя это:
System.Guid.NewGuid().ToString("N").ToUpper()
Который будет генерировать GUID в этом формате:
D51A752B70E743B0BA903DE7A3FFDF91
к которому можно добавить X'
string finalFormatted = "X'" + System.Guid.NewGuid().ToString("N").ToUpper();
Конечно, отрегулируйте соответственно (дух). Если у вас уже есть GUID, просто используйте
string finalFormatted = "X'" + theGuidYouAlreadyHave.ToString("N").ToUpper();
Обновить
Теперь я понял, что вы хотите разобрать. Здесь это идет:
string yourGuidString = "X'D51A752B70E743B0BA903DE7A3FFDF91";
Guid g = Guid.ParseExact(yourGuidString.Replace("X'",""), "N");
почему так сохраняется?
Вероятно, он просто хранится как 128-битное числовое поле, а не как строка. Синтаксис для вставки guid может просто не требовать тире.
как я могу разобрать это представление guid
использование Guid.ParseExact
с "N"
спецификатор формата:
string x = "X'0A16BBC77771594D9990A166014C54F6'";
Guid g = Guid.ParseExact(x.Substring(2,32), "N");