爲何建議使用Guid結構體作爲數據庫及排序時的主鍵

在.net2.0中,Guid結構體表示一個全局惟一標識符,是一個在生成時就能夠確定爲全世界惟一的16字節值。Guid在數據庫中一般能夠做爲各類排序的主鍵。好比shell

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;app

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,好比ui

 class Guid1{
        int _x;
         public Guid(int x) { _x = x; }
        }

    }

當以字符串形式出現時,Guid是一個由32個16進制數字表示。spa

Guid newGuid2 = Guid.NewGuid("664a92a8-70cd-46ec-b8e5-f7aba10d6127");

Guid是一個結構體,支持值類型的語義,Guid有一個ToByteArray方法能夠將其轉換爲一個字節數組,其中Guid.Empty靜態屬性能夠返回一個空的Guid,一般用來表示null。.net

相關文章
相關標籤/搜索