MS Dynamics CRM - 数据库 GUIDs

8
我正在使用CRM的SDK,并在我们实体的多个实例上打印出PK。我使用数据库的筛选视图重复此操作,得到了相同的答案:
    1a6c691d-391a-de11-8b0e-0050568407cb
    bd7b0ff0-391a-de11-8b0e-0050568407cb
    ed272bfe-391a-de11-8b0e-0050568407cb
    ...等等...
这些似乎不是有效的GUID。首先,它们看起来就不对 - 它们几乎完全相同,而GUID自旧版本1和2的GUID则基于MAC地址和时钟时间已经没有这样的属性。此外,一个GUID中的某个nibble表示GUID的版本 - 这里的nibble是不正确的。(第三部分的第一个nibble,即:1a6c691d-391a-**d**e11-8b0e-0050568407cb)- 有效值为1-5)(使用MS的GUID生成器生成GUID - 那个插槽将始终是4。(至少对于我所拥有的版本是这样的。))
这些是GUID还是只是ID,我该如何知道?

我也注意到了这一点。他们在我所看到的所有地方都将它们的ID称为GUID,但没有明确的指示。 - brendan
1个回答

10

您说得对,它们是GUID并且是连续的。这些键不是由CRM生成的,而是由SQL Server生成的。

SQL Server有一个名为uniqueidentifier的GUID类型。它可以配置为NEWID()或NEWSEQUENTIALID()。NEWID()每次都会生成一个新的GUID。NEWSEQUENTIALID()在第一次生成GUID时,然后在后续的数据库插入操作中按顺序递增。

因此,您已经发现了Dynamics CRM配置为NEWSEQUENTIALID()。

关于此的更多信息,请参见:http://www.mssqltips.com/tip.asp?tip=1600


哇,谢谢。我不确定我是否会得到这个问题的明确答案。做了更多的研究,找到了这个:http://www.fotia.co.uk/fotia/DY.19.NewSequentialId.aspx - 看起来它们可以被称为GUID,因为它们有你的MAC地址。 - Thanatos
有趣的文章,感谢您发布。它解释了为什么CRM使用NEWSEQUENTIALID() - 因为它具有数据库性能优势。 - David McDonald
我想问一下 @DavidMcDonald 是否有引用来源可以提供。我明显看到插入实体记录时有连续的值,但我不知道 CRM 是如何生成这些值的... 没有默认约束定义和身份设置... - Saul Dolgin
相关问题:有人知道同一个GUID是否可以用作不同实体类型的记录的主键,还是需要在所有实体类型中唯一使用PK GUID? - keerz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接