SequentialGuid.NodaTime 4.0.5
.NET 6.0 此包针对 .NET 6.0。该包与此框架或更高版本兼容。 .NET Standard 2.0 此包针对 .NET Standard 2.0。该包与此框架或更高版本兼容。 .NET Framework 4.6.2 此包针对 .NET Framework 4.6.2。该包与此框架或更高版本兼容。
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
NuGet 团队不提供对此客户端的支持。请联系其 维护者 获取支持。
#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
NuGet 团队不提供对此客户端的支持。请联系其 维护者 获取支持。
SequentialGuid
根据 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位整数时不会崩溃。
返回一个新的Guid或SqlGuid。16字节的Guid或SqlGuid由以下组成:
- 一个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 已计算。 |
-
.NETFramework 4.6.2
- NodaTime >= 2.4.0
- SequentialGuid >= 4.0.5
-
.NETStandard 2.0
- NodaTime >= 2.4.0
- SequentialGuid >= 4.0.5
-
.NETStandard 2.1
- NodaTime >= 2.4.0
- SequentialGuid >= 4.0.5
-
net6.0
- NodaTime >= 2.4.0
- SequentialGuid >= 4.0.5
-
net7.0
- NodaTime >= 2.4.0
- SequentialGuid >= 4.0.5
-
net8.0
- NodaTime >= 2.4.0
- SequentialGuid >= 4.0.5
NuGet 包
该包未由任何 NuGet 包使用。
GitHub 仓库
该包未由任何流行的 GitHub 仓库使用。