You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NFluentHibernate映射Guid主键报Identity类型需为整型错误

错误原因
  • Identity() 主键生成策略的设计目标是对接数据库原生自增主键能力,这类自增主键在所有主流数据库中都仅支持整数类型(int、long、uint、ulong),框架启动映射校验时会强制检查主键类型,非整数类型会直接抛出你遇到的错误。
  • 代码中实体DocumentDetails的主键Id定义为Guid类型,却配置了仅支持整数类型的Identity()生成策略,类型与生成策略完全不匹配,是报错的直接原因。
修复方法

根据业务场景二选一即可:

方案1:保留Guid主键

如果业务要求用Guid作为主键,把主键生成策略替换为Guid兼容的策略即可,常用选项:

  • GeneratedBy.GuidComb():应用侧生成连续Guid,能大幅降低数据库主键索引碎片,是Guid主键场景的首选配置
  • GeneratedBy.Guid():由数据库侧生成Guid值

修改后的主键映射代码:

// 仅替换主键生成策略,其余映射逻辑保持不变
Id(x => x.Id).Column("Id").GeneratedBy.GuidComb();

注意:选择该方案时,数据库中Id字段类型要对应设置为uniqueidentifier(SQL Server)/uuid(PostgreSQL)等Guid存储类型,不要给字段加自增属性。

方案2:保留Identity自增主键

如果业务上不需要Guid主键,想用数据库原生自增能力,直接把实体类的主键类型从Guid改成框架支持的整数类型即可,推荐优先用long避免后续数据量超过int上限:
修改后的实体主键定义:

// 替换原有的Guid类型Id定义
public virtual long Id { get; set; }

该场景下原有的GeneratedBy.Identity()映射配置不需要调整,数据库中Id字段设置为对应整数类型、开启自增属性即可。

内容的提问来源于stack exchange,提问作者Greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:36:18