From 2bd621da20cc0b838ff89ebc85977b601baa9424 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 1 Nov 2022 18:12:31 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20fsql.InsertOrUpdate=20?= =?UTF-8?q?CanInsert=3Dfalse,CanUpdate=3Dtrue=20(mysql/pgsql=EF=BC=89?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84=20bug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 47 +++++++++++++++++++ Examples/base_entity/base_entity.xml | 30 ++++++++++++ FreeSql.DbContext/FreeSql.DbContext.xml | 9 ++++ .../Curd/CustomMySqlOnDuplicateKeyUpdate.cs | 13 +++-- .../CustomPostgreSQLOnConflictDoUpdate.cs | 13 +++-- .../Curd/KingbaseESOnConflictDoUpdate.cs | 13 +++-- .../Curd/OnDuplicateKeyUpdate.cs | 13 +++-- .../Curd/OdbcKingbaseESOnConflictDoUpdate.cs | 13 +++-- .../Curd/OdbcMySqlOnDuplicateKeyUpdate.cs | 13 +++-- .../Curd/OdbcPostgreSQLOnConflictDoUpdate.cs | 13 +++-- .../Curd/OnConflictDoUpdate.cs | 13 +++-- 11 files changed, 166 insertions(+), 24 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 8fffff4c..2b8be9af 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -429,6 +429,15 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + + var sqlt0a1 = fsql.InsertOrUpdate<抖店实时销售金额表>() + .SetSource(new 抖店实时销售金额表 + { + ID = 1, + 品牌名称 = "NIKE", + }) + .ToSql(); + fsql.UseMessagePackMap(); fsql.Delete().Where("1=1").ExecuteAffrows(); @@ -1605,4 +1614,42 @@ namespace base_entity } } + public class 抖店实时销售金额表 + { + /// + /// ID + /// + [Column(Name = "ID", IsPrimary = true)] + public int ID { get; set; } + + /// + /// 店铺名称 + /// + [Column(Name = "店铺名称")] + public string 店铺名称 { get; set; } + + /// + /// 日期 + /// + [Column(Name = "日期")] + public DateTime 日期 { get; set; } + + /// + /// 品牌名称 + /// + [Column(Name = "品牌名称")] + public string 品牌名称 { get; set; } + + /// + /// 成交金额 + /// + [Column(Name = "成交金额")] + public decimal? 成交金额 { get; set; } + + /// + /// 更新时间 + /// + [Column(Name = "更新时间", CanInsert = false, CanUpdate = true, ServerTime = DateTimeKind.Local)] + public DateTime 更新时间 { get; set; } + } } diff --git a/Examples/base_entity/base_entity.xml b/Examples/base_entity/base_entity.xml index c340101f..aa997a23 100644 --- a/Examples/base_entity/base_entity.xml +++ b/Examples/base_entity/base_entity.xml @@ -79,6 +79,36 @@ 软删除 + + + ID + + + + + 店铺名称 + + + + + 日期 + + + + + 品牌名称 + + + + + 成交金额 + + + + + 更新时间 + + 角色表 diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 537315e2..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -800,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs index e67f1c85..3af6c7e1 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlOnDuplicateKeyUpdate.cs @@ -92,9 +92,16 @@ namespace FreeSql.Custom.MySql } else if (_mysqlInsert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _mysqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _mysqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_mysqlInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _mysqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _mysqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + } } else { diff --git a/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs index b9c9c4cd..b7717283 100644 --- a/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/PostgreSQL/Curd/CustomPostgreSQLOnConflictDoUpdate.cs @@ -132,9 +132,16 @@ namespace FreeSql.Custom.PostgreSQL } else if (_pgsqlInsert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_pgsqlInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + } } else { diff --git a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs index 220b9715..91036fb5 100644 --- a/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.KingbaseES/Curd/KingbaseESOnConflictDoUpdate.cs @@ -132,9 +132,16 @@ namespace FreeSql.KingbaseES } else if (_insert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _update.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _update.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_insert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _update.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _update.InternalToSqlCaseWhenEnd(sb, col); + } } else { diff --git a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs index ece3c512..5cdccc17 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/OnDuplicateKeyUpdate.cs @@ -92,9 +92,16 @@ namespace FreeSql.MySql.Curd } else if (_mysqlInsert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _mysqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _mysqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_mysqlInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _mysqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _mysqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + } } else { diff --git a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs index dd6f5866..e061da85 100644 --- a/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/KingbaseES/Curd/OdbcKingbaseESOnConflictDoUpdate.cs @@ -132,9 +132,16 @@ namespace FreeSql.Odbc.KingbaseES } else if (_pgsqlInsert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_pgsqlInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + } } else { diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs index 4f450158..79bec80f 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlOnDuplicateKeyUpdate.cs @@ -92,9 +92,16 @@ namespace FreeSql.Odbc.MySql } else if (_mysqlInsert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _mysqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _mysqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_mysqlInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _mysqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _mysqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + } } else { diff --git a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs index 0e9b42e6..474fd73e 100644 --- a/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/PostgreSQL/Curd/OdbcPostgreSQLOnConflictDoUpdate.cs @@ -132,9 +132,16 @@ namespace FreeSql.Odbc.PostgreSQL } else if (_pgsqlInsert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_pgsqlInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + } } else { diff --git a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs index a0b99260..7727ea78 100644 --- a/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs +++ b/Providers/FreeSql.Provider.PostgreSQL/Curd/OnConflictDoUpdate.cs @@ -132,9 +132,16 @@ namespace FreeSql.PostgreSQL.Curd } else if (_pgsqlInsert.InternalIgnore.ContainsKey(col.Attribute.Name)) { - var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); - sb.Append(caseWhen); - if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + if (string.IsNullOrEmpty(col.DbUpdateValue) == false) + { + sb.Append(_pgsqlInsert.InternalCommonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ").Append(col.DbUpdateValue); + } + else + { + var caseWhen = _pgsqlUpdate.InternalWhereCaseSource(col.CsName, sqlval => sqlval).Trim(); + sb.Append(caseWhen); + if (caseWhen.EndsWith(" END")) _pgsqlUpdate.InternalToSqlCaseWhenEnd(sb, col); + } } else {