解析guid表示

时间:2013-02-15 19:29:23

标签: c# guid

我正在使用代码方法和约定的映射来动态生成sqllite数据库表。

Id属性使用Guid.Comb算法进行映射。

Id(x => x.Id, m => m.Generator(Generators.GuidComb));

测试似乎没有问题,除了一件事,我的db表中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 个答案:

答案 0 :(得分: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");

答案 1 :(得分:1)

  

为什么这样保存?

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

  

我如何解析这个guid表示

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

string x = "X'0A16BBC77771594D9990A166014C54F6'";
Guid g = Guid.ParseExact(x.Substring(2,32), "N");