0

我正在使用通过代码方法和约定进行映射来动态生成 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);

4

2 回答 2

2

您可以使用以下方法生成 guid:

System.Guid.NewGuid().ToString("N").ToUpper()

这将生成这种格式的 GUID:

D51A752B70E743B0BA903DE7A3FFDF91

您可以附加到其中X'

string finalFormatted = "X'" + System.Guid.NewGuid().ToString("N").ToUpper();

当然,相应地调整(duh)。如果您已经有了 GUID,只需使用

string finalFormatted = "X'" + theGuidYouAlreadyHave.ToString("N").ToUpper();

更新

我现在意识到你想解析。它是这样的:

string yourGuidString = "X'D51A752B70E743B0BA903DE7A3FFDF91";
Guid g = Guid.ParseExact(yourGuidString.Replace("X'",""), "N");
于 2013-02-15T19:32:26.213 回答
1

为什么这样保存?

它可能只是将其存储为 128 位数字字段而不是字符串。插入guid的语法可能不需要破折号。

我如何解析这个 guid 表示

Guid.ParseExact"N"格式说明符一起使用:

string x = "X'0A16BBC77771594D9990A166014C54F6'";
Guid g = Guid.ParseExact(x.Substring(2,32), "N");
于 2013-02-15T19:35:16.667 回答