SequentialGuid 4.0.5

dotnet add package SequentialGuid --version 4.0.5                
NuGet\Install-Package SequentialGuid -Version 4.0.5                
该命令打算在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="SequentialGuid" Version="4.0.5" />                
对于支持 包引用 的项目,将此 XML 节点复制到项目文件中以便引用包。
paket add SequentialGuid --version 4.0.5                
#r "nuget: SequentialGuid, 4.0.5"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此复制到交互式工具或脚本的源代码中以便引用包。
// Install SequentialGuid as a Cake Addin
#addin nuget:?package=SequentialGuid&version=4.0.5

// Install SequentialGuid as a Cake Tool
#tool nuget:?package=SequentialGuid&version=4.0.5                

SequentialGuid

Continuous IntegrationNuGetLicense: MIT

将基于 MongoDB 的 ObjectId 规范排序算法 生成顺序 Guid。日期和时间被编码到值中,因此您不需要在数据库中单独存储它们

作者注:此库的整个目的在于为您提供一种无依赖性的方式来生成包含创建时间的唯一uuid/Guid值。一旦它们被持久化,这通常会导致后端上的更低簇集索引碎片。但这也允许您在WebAssembly或MAUI中生成密钥,并通过您的API传递并存储在数据库中,这可以帮助您在无需访问数据库来生成ID的情况下保持项目的持久性。请不要打开一个问题,告之我它不使用Unix时间戳或不是ObjectId,这两者都是正确的。我不得不找到32位额外的位来填充一个Guid与ObjectId,所以我选择使用Tics计数来这样做,同时保留Mongo算法的其余部分。此外,此库不会在2038年1月19日03:14:07 UTC时受到Unix时间戳溢出一个32位整数的破坏。

返回一个新的GuidSqlGuid。16字节格式的GuidSqlGuid由以下组成

  • 8字节时间戳,表示Guid的创建时间,以系统ticks为单位。
  • 每次在进程内生成一个5字节的随机值。此随机值对每台计算机和进程都是唯一的。
  • 一个初始化为随机值的3字节递增计数器。

如果您使用SQL Server,那么我强烈建议阅读以下两篇文章以获取如何理解SQL Serveruniqueidentifier值进行排序的基本知识。

定义您喜欢的签名接口

public interface IIdGenerator
{
    Guid NewId();
}

定义您的实现类,它可以是瞬时的,因为单例是通过框架实现的

public class SequentialIdGenerator : IIdGenerator
{
    public Guid NewId() => SequentialGuidGenerator.Instance.NewGuid();
}

在应用程序启动时,在ConfigureServices方法中将它与.NET Core依赖注入绑定

public void ConfigureServices(IServiceCollection services)
{
    services.AddTransient<IIdGenerator, SequentialIdGenerator>();
}

最后,为您的应用程序定义一个基础实体,一旦初始化它就会包含一个id和一个时间戳。注意,我不提倡以这种方式设置默认的Id获取器,而只是在展示它是可以完成的。

public abstract class BaseEntity
{
    public Guid Id { get; set; } = SequentialGuidGenerator.Instance.NewGuid();
    public DateTime? Timestamp => Id.ToDateTime();
    // If you really must have non-UTC time
    public DateTime? LocalTime => Id.ToDateTime()?.ToLocalTime();
}

您可以使用可用的辅助函数在标准Guid和SqlGuid之间进行转换

var guid = SequentialGuidGenerator.Instance.NewGuid();
var sqlGuid = guid.ToSqlGuid();

var sqlGuid = SequentialSqlGuidGenerator.Instance.NewSqlGuid();
var guid = sqlGuid.ToGuid();
产品 兼容的和额外的计算目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 兼容。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 兼容。
.NET Framework net461 已计算。 net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid MonoAndroid 已计算。
MonoMac MonoMac 已计算。
MonoTouch MonoTouch 已计算。
Tizen Tizen40 已计算。 Tizen60 已计算。
Xamarin.iOS XamariniOS 已计算。
Xamarin.Mac XamarinMac 已计算。
Xamarin.TVOS XamarinTVOS 已计算。
Xamarin.WatchOS XamarinWatchOS 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于 目标框架.NET Standard 的信息。
  • .NETFramework 4.6.2

    • 无依赖项。
  • .NETStandard 2.0

    • 无依赖项。
  • .NETStandard 2.1

    • 无依赖项。
  • net6.0

    • 无依赖项。
  • net7.0

    • 无依赖项。
  • net8.0

    • 无依赖项。

NuGet 包 (13)

显示依赖于 SequentialGuid 的前 5 个 NuGet 包

下载
BR.MicroServices.Utilities

包描述

SequentialGuid.NodaTime

提供在 NodaTime Instant 和顺序 Guid 之间往返的扩展方法

Loyo.EntityFramework

EntityFrameworkCore 单元操作存储库

Atomiv.Infrastructure.SequentialGuid

包描述

Optivem.Atomiv.Infrastructure.SequentialGuid

包描述

GitHub 代码库

这个包不被任何流行的 GitHub 代码库使用。

版本 下载 最后更新
4.0.5 15,329 3/20/2024
4.0.4 388,257 2/27/2023
4.0.3 49,019 10/25/2022
4.0.2 8,647 10/20/2022
4.0.1 5,237 10/10/2022
4.0.0 3,307 10/5/2022
3.0.1 93,199 2/22/2022
3.0.0 32,961 9/15/2021
2.5.0 254,503 11/18/2020
2.4.2 21,687 7/31/2020
2.4.1 32,572 7/8/2020
2.4.0 179,511 12/13/2017
2.2.1 2,082 10/17/2017
2.2.0 2,077 9/24/2017
1.0.0 5,229 2/17/2014