SequentialGuid.NodaTime 4.0.5

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

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

SequentialGuid

Continuous IntegrationNuGetLicense: MIT

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

作者注:此库的整个目的是为您提供一个无需依赖项即可生成包含创建时间的唯一uuid/Guid值的方案,这通常会在持久化后降低后端簇索引碎片。它还可以让您在WebAssembly或MAUI中生成密钥,通过API传递并在数据库中存储它,这可以帮助您实现在不实际访问数据库的情况下生成ID。请勿发起问题告诉我它不使用Unix时间戳或不是ObjectId,这两者都是正确的。为了用Guid与ObjectId一样填充32位,我不得不找到额外的32位,因此我选择了使用滴答计数器来实现,同时保留了Mongo算法的其余部分。额外的优点是,这个库在2038年1月19日03:14:07 UTC时分,Unix时间戳溢出32位整数时不会崩溃。

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

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

如果您使用SQL Server,我强烈建议阅读以下两篇文章,以便了解SQL Server如何对uniqueidentifier值进行排序

定义您喜欢的签名接口

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 的更多信息。

NuGet 包

该包未由任何 NuGet 包使用。

GitHub 仓库

该包未由任何流行的 GitHub 仓库使用。

版本 下载 最后更新时间
4.0.5 1,511 3/20/2024
4.0.4 8,807 2/27/2023
4.0.3 3,431 10/25/2022
4.0.2 406 10/20/2022
4.0.1 677 10/10/2022
4.0.0 461 10/5/2022
3.0.1 2,272 2/22/2022
3.0.0 678 9/15/2021
2.5.0 1,009 11/18/2020