为什么建议使用Guid结构体做为数据库及排序时的主键
忘临川 人气:2在.net2.0中,Guid结构体表示一个全局唯一标识符,是一个在生成时就可以肯定为全世界唯一的16字节值。Guid在数据库中通常可以作为各种排序的主键。比如
1 public class Company 2 { 3 public Guid id { get; set; } 4 ...... 5 }
其中Guid可以表示值范围总共有2128或者3.4x1018个值。
可以调用静态的Guid.newGuid方法创件一个新的唯一的Guid;
在vs code里直接dotnet new console -n test创建控制台项目,写入测试代码:
1 using System; 2 using static System.Guid; 3 using static System.Console; 4 namespace test 5 { 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 Guid newGuid1 = Guid.NewGuid(); 11 WriteLine(newGuid1.ToString()); 12 } 13 } 14 }
然后在powershell里cd test,进行dotnet build及dotnet run;
PS C:\Users\huang\source\repos\数据结构\Guid> dotnet build 用于 .NET Core 的 Microsoft (R) 生成引擎版本 16.4.0+e901037fe 版权所有(C) Microsoft Corporation。保留所有权利。 C:\Users\huang\source\repos\数据结构\Guid\Guid.csproj 的还原在 35.37 ms 内完成。 Guid -> C:\Users\huang\source\repos\数据结构\Guid\bin\Debug\netcoreapp3.1\Guid.dll 已成功生成。 0 个警告 0 个错误 已用时间 00:00:01.10 PS C:\Users\huang\source\repos\数据结构\Guid> dotnet run 664a92a8-70cd-46ec-b8e5-f7aba10d6127 PS C:\Users\huang\source\repos\数据结构\Guid>
可看到生成了一个16字节值。
当然,也可以直接使用构造器实例化一个现有的Guid,比如
class Guid1{ int _x; public Guid(int x) { _x = x; } } }
当以字符串形式出现时,Guid是一个由32个16进制数字表示。
Guid newGuid2 = Guid.NewGuid("664a92a8-70cd-46ec-b8e5-f7aba10d6127");
Guid是一个结构体,支持值类型的语义,Guid有一个ToByteArray方法可以将其转换为一个字节数组,其中Guid.Empty静态属性可以返回一个空的Guid,通常用来表示null。
加载全部内容