mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-20 00:44:19 +08:00
Merge pull request #1361 from MarsonShine/master
feat: 增加对PGSQL10及以上主键 IDENTITY 类型的支持,保持对默认实现 Serial 类型的兼容处理。
This commit is contained in:
commit
ab8ec39f77
@ -200,7 +200,7 @@ namespace SqlSugar
|
||||
{
|
||||
foreach (var item in insertData)
|
||||
{
|
||||
this._Context.Insertable(insertData).ExecuteCommandIdentityIntoEntity();
|
||||
this._Context.Insertable(item).ExecuteCommandIdentityIntoEntity();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
namespace SqlSugar.Realization.PostgreSQL
|
||||
{
|
||||
public enum PostgresIdentityStrategy
|
||||
{
|
||||
/// <summary>
|
||||
/// NEXTVAL() function
|
||||
/// </summary>
|
||||
Serial = 1,
|
||||
/// <summary>
|
||||
/// 自增长,PGSQL10+版本最佳实践
|
||||
/// </summary>
|
||||
Identity = 2
|
||||
}
|
||||
}
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user