SequentialGuid.MongoDB 4.0.5
dotnet add package SequentialGuid.MongoDB --version 4.0.5
NuGet\Install-Package SequentialGuid.MongoDB -Version 4.0.5
<PackageReference Include="SequentialGuid.MongoDB" Version="4.0.5" />
paket add SequentialGuid.MongoDB --version 4.0.5
#r "nuget: SequentialGuid.MongoDB, 4.0.5"
// Install SequentialGuid.MongoDB as a Cake Addin #addin nuget:?package=SequentialGuid.MongoDB&version=4.0.5 // Install SequentialGuid.MongoDB as a Cake Tool #tool nuget:?package=SequentialGuid.MongoDB&version=4.0.5
SequentialGuid
根据 MongoDB 的 ObjectId 规范 排序算法生成顺序 Guid。日期和时间被编码到值中,因此您不需要在数据库中单独存储它们
作者注:这个库的整个目的是为了提供一个无依赖的生成唯一 uuid/Guid 值的方式,这些值包含创建时间。这样在持久化后通常会导致后台的低簇索引碎片化。但是,它允许你一路生成到 WebAssembly 或 MAUI,并通过你的 API 传递并存储在数据库中,这可以帮助你实现不朽性,不需要访问数据库生成 ID。请务必不要打开一个问题告诉我它没有使用 Unix 时间戳或它不是一个 ObjectId,这两个都是真的。我必须找到 32 位额外的位来填充一个 Guid 相比于 ObjectId,所以我选择使用 Ticks 计数来这样做,同时保留 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
- MongoDB.Bson (>= 2.19.0)
- SequentialGuid (>= 4.0.5)
-
.NETStandard 2.0
- MongoDB.Bson (>= 2.19.0)
- SequentialGuid (>= 4.0.5)
-
.NETStandard 2.1
- MongoDB.Bson (>= 2.19.0)
- SequentialGuid (>= 4.0.5)
-
net6.0
- MongoDB.Bson (>= 2.19.0)
- SequentialGuid (>= 4.0.5)
-
net7.0
- MongoDB.Bson (>= 2.19.0)
- SequentialGuid (>= 4.0.5)
-
net8.0
- MongoDB.Bson (>= 2.19.0)
- SequentialGuid (>= 4.0.5)
NuGet 包
此包不包括任何 NuGet 包。
GitHub 仓库
此包不包括任何流行的 GitHub 仓库。