feat: 增加对PGSQL10及以上主键 IDENTITY 类型的支持,保持对默认实现 Serial 类型的兼容处理。

fix: 删除导航批量查询的bug
This commit is contained in:
marsonshine 2025-08-18 11:20:53 +08:00
parent 32d83ec599
commit b099fa6dbc
5 changed files with 37 additions and 10 deletions

View File

@ -200,7 +200,7 @@ namespace SqlSugar
{
foreach (var item in insertData)
{
this._Context.Insertable(insertData).ExecuteCommandIdentityIntoEntity();
this._Context.Insertable(item).ExecuteCommandIdentityIntoEntity();
}
}
else

View File

@ -1,4 +1,5 @@
using System;
using SqlSugar.Realization.PostgreSQL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -39,5 +40,6 @@ namespace SqlSugar
public DbType? DatabaseModel { get;set; }
public bool ClickHouseEnableFinal { get; set; }
public bool EnableJsonb { get; set; }
public PostgresIdentityStrategy PostgresIdentityStrategy { get; set; } = PostgresIdentityStrategy.Serial; // 兼容性处理默认使用Serial
}
}

View File

@ -485,6 +485,7 @@ WHERE tgrelid = '"+tableName+"'::regclass");
{
List<string> columnArray = new List<string>();
Check.Exception(columns.IsNullOrEmpty(), "No columns found ");
var identityStrategy = this.Context.CurrentConnectionConfig.MoreSettings?.PostgresIdentityStrategy;
foreach (var item in columns)
{
string columnName = item.DbColumnName;
@ -508,17 +509,26 @@ WHERE tgrelid = '"+tableName+"'::regclass");
string addItem = string.Format(this.CreateTableColumn, this.SqlBuilder.GetTranslationColumnName(columnName.ToLower(isAutoToLowerCodeFirst)), dataType, dataSize, nullType, primaryKey, "");
if (item.IsIdentity)
{
if (dataType?.ToLower() == "int")
if(identityStrategy == Realization.PostgreSQL.PostgresIdentityStrategy.Serial)
{
dataSize = "int4";
if (dataType?.ToLower() == "int")
{
dataSize = "int4";
}
else if (dataType?.ToLower() == "long")
{
dataSize = "int8";
}
string length = dataType.Substring(dataType.Length - 1);
string identityDataType = "serial" + length;
addItem = addItem.Replace(dataType, identityDataType);
}
else if (dataType?.ToLower() == "long")
else if (identityStrategy == Realization.PostgreSQL.PostgresIdentityStrategy.Identity)
{
dataSize = "int8";
string length = dataType.Substring(dataType.Length - 1);
string identityDataType = "INT" + length + " GENERATED BY DEFAULT AS IDENTITY";
addItem = addItem.Replace(dataType, identityDataType);
}
string length = dataType.Substring(dataType.Length - 1);
string identityDataType = "serial" + length;
addItem = addItem.Replace(dataType, identityDataType);
}
columnArray.Add(addItem);
}

View File

@ -0,0 +1,14 @@
namespace SqlSugar.Realization.PostgreSQL
{
public enum PostgresIdentityStrategy
{
/// <summary>
/// NEXTVAL() function
/// </summary>
Serial = 1,
/// <summary>
/// 自增长PGSQL10+版本最佳实践
/// </summary>
Identity = 2
}
}

View File

@ -900,7 +900,8 @@ namespace SqlSugar
EnableILike=it.MoreSettings.EnableILike,
ClickHouseEnableFinal=it.MoreSettings.ClickHouseEnableFinal,
PgSqlIsAutoToLowerSchema=it.MoreSettings.PgSqlIsAutoToLowerSchema,
EnableJsonb=it.MoreSettings.EnableJsonb
EnableJsonb=it.MoreSettings.EnableJsonb,
PostgresIdentityStrategy = it.MoreSettings.PostgresIdentityStrategy
},
SqlMiddle = it.SqlMiddle == null ? null : new SqlMiddle