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

时间:2013-04-24 15:20:20

标签: c# asp.net-mvc database primary-key guid

我有一个表,其中主键是Guid类型。在我的MVC应用程序中,我想在此表中添加一条记录。我知道创建新Guid的Guid.newGuid()。这很好但我有一个问题。如何确保创建的Guid是唯一的(数据库中尚不存在)?有没有办法通过比较已有的值来生成它,以确保新的guid在数据库记录中是唯一的?

3 个答案:

答案 0 :(得分:3)

指导生成技术的全部目的是它不需要。即使算法无法访问所有其他先前生成的GUID,该算法也会生成全局唯一值。

特别是,算法只生成一个大的随机数。 GUID中有如此多的数据位,其中两个具有相同值的几率非常小。小到足以让他们真正被忽视。

有关更详细的分析,请参阅Eric Lippert's blog on the subject。 (特别是part three。)

请注意,因此,使用GUID作为唯一标识符将占用数据库中相当多的空间,然后只使用数字标识符。任何体面的数据库都有一个特殊的列类型,专门设计为一个唯一的标识符,它将填充;这样的列将能够确保唯一性,同时使用比GUID少得多的空间。

答案 1 :(得分:2)

生成重复的可能性非常低。但是,您将在数据库表上强制执行UNIQUE约束。

答案 2 :(得分:1)

然而,新GUId与数据库中的任何人匹配的可能性很小。

但是如果你仍然想要确保只创建一个proc或者为GUID赋予真或假的东西。如果它返回true,则再次生成并重复此过程,直到找不到唯一的GUID。