為什麼建議使用Guid結構體做為資料庫及排序時的主鍵
阿新 • • 發佈:2020-02-13
在.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,通常用來表示nul