GUID 生成
GUID是数据库管理系统中使用的常见主键类型。并且 ABP 框架假定用户 ID 始终是 GUID 类型。
IGuidGenerator 接口服务
GUID的最主要的问题是默认情况下它不是连续的。 当将 GUID 用作主键并将其设置为表的索引(默认设置)时,会在插入时带来严重的性能问题(因为插入新记录可能需要对现有记录进行重新排序)。
所以,不要使用 Guid.NewGuid() 为您的实体创建ID。ABP框架提供 IGuidGenerator 服务用于创建连续的 GUID。
1 | using System; |
- IGuidGenerator.Create() 用于创建连续的
Guid。
配置
AbpSequentialGuidGeneratorOptions
AbpSequentialGuidGeneratorOptions 是用于配置顺序GUID生成的选项类,它具有一个枚举类型属性。
- DefaultSequentialGuidType(类型为 SequentialGuidType 的枚举):生成GUID值时使用的策略。
数据库在处理 GUID 时会有所不同,因此您应根据指定数据库进行设置
- SequentialAtEnd SQL Server
- SequentialAsString MySQL or PostgreSQL
- SequentialAsBinary Oracle
在模块的 ConfigureServices 中进行配置
1 | Configure<AbpSequentialGuidGeneratorOptions>(options => |
看源码
源码位置 Volo.Abp.Guids\Volo\Abp\Guids\SequentialGuidGenerator.cs
1 | public Guid Create(SequentialGuidType guidType) |
- 他的生成方式就是一个随机的 10 byte 的内容与当前时间 6 byte 相关的一个拼接,最终生成一个二进制长度为 128 位的 Guid。