SequentialGuid 4.0.5
dotnet add package SequentialGuid --version 4.0.5
NuGet\Install-Package SequentialGuid -Version 4.0.5
<PackageReference Include="SequentialGuid" Version="4.0.5" />
paket add SequentialGuid --version 4.0.5
#r "nuget: SequentialGuid, 4.0.5"
// 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
将基于 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位整数的破坏。
返回一个新的Guid或SqlGuid。16字节格式的Guid或SqlGuid由以下组成
- 8字节时间戳,表示Guid的创建时间,以系统ticks为单位。
- 每次在进程内生成一个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
- 无依赖项。
-
.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 |