GUID 生成
GUID有优缺点. 你可以在网上找到许多与此主题相关的文章,因此我们不再赘述,而是列出了最基本的优点:
- 它允许在客户端确定主键,而不需要通过数据库往返来生成Id值. 在向数据库插入新记录时,这可以提高性能并允许我们在与数据库交互之前知道PK.
- GUID是自然唯一的在以下情况下有一些优势;
- 你需要与外部系统集成,
- 你需要拆分或合并不同的表.
- GUID是无法猜测的,因此在某些情况下与自动递增的Id值相比,GUID更安全.
尽管存在一些缺点(只需在Web上搜索),但在设计ABP框架时我们发现这些优点更为重要.
GUID的最重要问题是默认情况下它不是连续的. 当你将GUID用作主键并将其设置为表的聚集索引(默认设置)时,这会在插入时带来严重的性能问题(因为插入新记录可能需要对现有记录进行重新排序).
这个问题的一个好的解决方案是生成连续的GUID,由ABP框架提供的开箱即用的. IGuidGenerator
服务创建顺序的GUID(默认由 SequentialGuidGenerator
实现). 当需要手动设置实体的Id时,请使用 IGuidGenerator.Create()
.
示例: 具有GUID主键的实体并创建该实体
假设你有一个具有 Guid
主键的 :
该服务将 IGuidGenerator
注入构造函数中. 如果你的类是应用服务或派生自其他基类之一,可以直接使用 GuidGenerator
基类属性,该属性是预先注入的 IGuidGenerator
实例.
AbpSequentialGuidGeneratorOptions
是用于配置顺序生成GUID的. 它只有一个属性:
DefaultSequentialGuidType
( 类型的枚举): 生成GUID值时使用的策略.
数据库提供程序在处理GUID时的行为有所不同,你应根据数据库提供程序进行设置. SequentialGuidType
有以下枚举成员:
SequentialAtEnd
(default) 用于SQL Server.SequentialAsString
用于和PostgreSQL.