我正在使用代码方法和约定的映射来动态生成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);
答案 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");