c#生成唯一的Guid(不存在于数据库中的表中)

本文关键字:数据库 不存在 唯一 Guid | 更新日期: 2023-09-27 18:10:47

我有一个主键类型为Guid的表。在我的MVC应用程序中,我想向该表添加一条记录。我知道Guid.newGuid()创建了一个新的Guid。这很有效,但我有一个担忧。如何确保创建的Guid是唯一的(还不存在于数据库中)?是否有一种方法可以通过比较已经存在的值来生成它,以确保新的guid在数据库记录中是唯一的?

c#生成唯一的Guid(不存在于数据库中的表中)

向导生成技术的全部目的是它不需要。该算法将生成一个全局唯一的值,即使它没有访问所有其他先前生成的guid。

特别地,该算法只生成一个大随机数。GUID中有如此多的数据位,以至于其中两个具有相同值的几率是无穷小的。小到可以忽略

有关更详细的分析,请参阅Eric Lippert关于该主题的博客。(特别是第三部分)

请注意,这样做的结果是,使用GUID作为唯一标识符将比使用数字标识符在数据库中占用更多的空间。任何像样的数据库都会有一个特殊的列类型,专门设计成一个唯一的标识符,它将填充;这样的列将能够确保唯一性,同时使用比GUID少得多的空间。

生成副本的可能性非常低。但是,您可以在数据库表上强制UNIQUE约束。

但是,新的GUId与数据库中存在的任何人匹配的可能性很小。

但是,如果你仍然想要确定,只需创建一个进程或其他将为GUID给出true或false的东西。如果返回true,则再次生成并重复此过程,直到无法获得唯一的GUID。