SequentialGuid.MongoDB 4.0.5

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

Continuous IntegrationNuGetLicense: MIT

根据 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 位整数。

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

  • 一个 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 已计算。
兼容的目标框架
包含的目标框架(在包中)
了解更多关于目标框架.NET Standard 的信息。

NuGet 包

此包不包括任何 NuGet 包。

GitHub 仓库

此包不包括任何流行的 GitHub 仓库。

版本 下载 最后更新
4.0.5 101 3/20/2024
4.0.4 262 2/27/2023
4.0.3 385 10/25/2022
4.0.2 397 10/20/2022
4.0.1 372 10/10/2022
4.0.0 352 10/5/2022
3.0.1 455 2/22/2022
3.0.0 372 9/15/2021
2.5.0 449 11/18/2020