Compare commits

...

5 Commits

Author SHA1 Message Date
sunkaixuan
68b890ad9e Optimize the code 2025-08-18 12:07:04 +08:00
sunkaixuan
2d5710c96f Optimize the code 2025-08-18 12:05:30 +08:00
sunkaixuan
ba48aaf672 Optimize the code 2025-08-18 12:05:13 +08:00
果糖网
ab8ec39f77
Merge pull request #1361 from MarsonShine/master
feat: 增加对PGSQL10及以上主键 IDENTITY 类型的支持,保持对默认实现 Serial 类型的兼容处理。
2025-08-18 11:59:28 +08:00
marsonshine
b099fa6dbc feat: 增加对PGSQL10及以上主键 IDENTITY 类型的支持,保持对默认实现 Serial 类型的兼容处理。
fix: 删除导航批量查询的bug
2025-08-18 11:20:53 +08:00
5 changed files with 35 additions and 9 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

@ -39,5 +39,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

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

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 != PostgresIdentityStrategy.Identity)
{
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
{
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

@ -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