关于使用CodeFirst方式在瀚高数据库创建表时自增ID的问题 返回
NET8.0 + 瀚高数据库
NuGet框架版本信息
SqlSugarCore 5.1.4.205
SqlSugar.HGCore 5.1.4.190
问题描述:我在通过CodeFirst方式创建表后,自增ID默认采用了 nextval 这种形式的序列,但是我想自增ID采用这种类型(GENERATED ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY),我查阅了相关资料,也修改了这种类型,但是发现初始化数据时受到了影响。
以下是我的实现步骤:
1、我的实体
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }2、我通过这种方式创建表
hg_db.CodeFirst.InitTables();
3、当我创建成功后,查看瀚高数据库表结构,其中自增ID序列类型如下:

这种情况不符合我的预期,我是想要这种自增ID类型(GENERATED ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY)

4、于是我修改了实体属性后,再次尝试建表
[SugarColumn(IsPrimaryKey = true, ColumnDataType = "integer GENERATED BY DEFAULT AS IDENTITY", ColumnDescription = "主键Id")]
public int Id { get; set; }此时字段类型正确✅️

但添加数据时提示了错误

我再次修改实体属性如下,此时我不重新建表了,仅添加数据,执行成功✅️
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }有没有一举两得的方式?我既能得到想要的类型,又不影响初始化数据?
热忱回答(11)
-
sweet VIP0
2025/11/20刚刚换了个思路,如果我的实体是这样的
[SugarColumn(IsPrimaryKey = true, ColumnDataType = "integer GENERATED BY DEFAULT AS IDENTITY")] public int Id { get; set; }我发现使用下面这种方式,是可以成功添加数据的✅️,自增ID表中也是正确的
var data = hg_db.Insertable(new_list).IgnoreColumns(it => new { it.Id }).ExecuteCommand();0 回复 -
fate sta VIP0
2025/11/20[SugarColumn(ColumnName ="id", IsPrimaryKey =true, IsIdentity =true)]publicintId {get;set; }表删了,直接这样试试。
0 回复 -
sweet VIP0
2025/11/20@fate sta:我每次建表的时候,都会执行删除表。你这个回复,我试过不行的,类型都是 nextval ,并不是我说的 GENERATED ALWAYS AS IDENTITY 或 GENERATED BY DEFAULT AS IDENTITY。
0 回复 -
fate sta VIP0
2025/11/20[SugarColumn(ColumnName ="id", IsPrimaryKey =true, IsIdentity =true)]publicintId {get;set; }这种nextval 方式我记得是可以用的
0 回复 -
fate sta VIP0
2025/11/20新表报什么错。
0 回复 -
sweet VIP0
2025/11/21@fate sta:我知道可以用nextval ,但是我们要求使用这种类型 GENERATED ALWAYS AS IDENTITY类型
0 回复 -
fate sta VIP0
2025/11/21[SugarColumn(IsPrimaryKey =true,IsIdentity =true ,ColumnDataType ="integer GENERATED BY DEFAULT AS IDENTITY")]publicintId {get;set; }你这样试一下可以用不,可以用我支持一下配置。
0 回复 -
sweet VIP0
2025/11/21@fate sta:你说的这种方式我试过了,IsIdentity = true 和 ColumnDataType = "integer GENERATED BY DEFAULT AS IDENTITY" ,这两个属性,不能同时设置,建表的时候会报错的,如下:

您可以亲自试试
0 回复 -
fate sta VIP0
2025/11/21@sweet:需供一个线上字符串。我这边来测试。我本地暂时没这个库
0 回复 -
fate sta VIP0
2025/11/21SqlSugar.Nhgdb 5.1.4.207
过五分钟升级到这个版本设置
Moresetting里面
PostgresIdentityStrategy设置为Identity
0 回复 -
fate sta VIP0
2025/11/21IsAutoCloseConnection =true,DbType = DbType.XXX,ConnectionString = Connection,MoreSettings =newConnMoreSettings(){// 默认是Serial方式实现自增兼容低版本PGSQL,Identity只支较高高版本PGSQLPostgresIdentityStrategy = PostgresIdentityStrategy.Identity},0 回复