From dd1f64a77266dc04105770fad3ae4fe46480bf8a Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Thu, 24 Aug 2023 11:20:19 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20MySql=20+=20InsertOrUp?= =?UTF-8?q?dateDict=20+=20IfExistsDoNothing=20=E9=94=99=E8=AF=AF=EF=BC=9B#?= =?UTF-8?q?1601?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 10 +++++++++- FreeSql.DbContext/FreeSql.DbContext.xml | 18 ------------------ .../MySql/Curd/CustomMySqlInsertOrUpdate.cs | 18 ++++++++++++------ .../Curd/MySqlInsertOrUpdate.cs | 18 ++++++++++++------ .../MySql/Curd/OdbcMySqlInsertOrUpdate.cs | 18 ++++++++++++------ .../Curd/SqliteInsertOrUpdate.cs | 19 ++++++++++++------- 6 files changed, 57 insertions(+), 44 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index ac357952..d8a1c7d1 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -559,7 +559,7 @@ namespace base_entity //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5") //.UseQuoteSqlName(false) - .UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") + //.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;min pool size=1;Max pool size=3;AllowLoadLocalInfile=true") //.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true") @@ -600,6 +600,14 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + var dict = new List>(); + Dictionary d = new Dictionary(); + d.Add("id", 1); + d.Add("name", "name1"); + dict.Add(d); + var testx01 = fsql.InsertOrUpdateDict(dict).AsTable("table222zzz").WherePrimary("id").IfExistsDoNothing().ToSql(); + fsql.InsertOrUpdateDict(dict).AsTable("table222zzz").WherePrimary("id").IfExistsDoNothing().ExecuteAffrows(); + var xxxc1 = User1.Select.ToSql(a => new { count = User1.Where(b => b.Id == a.Id).Count() diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 26522f10..594fbad3 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -733,15 +733,6 @@ - - - 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 - - - - - - 创建普通数据上下文档对象 @@ -800,14 +791,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs index 8ad61e35..3b257fc1 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsertOrUpdate.cs @@ -88,12 +88,18 @@ namespace FreeSql.Custom.MySql { if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => - sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( - _orm.Select() - .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) - .DisableGlobalFilter() - .WhereDynamic(rowd) - .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); + { + sb.Append(" \r\n FROM dual WHERE NOT EXISTS("); + if (typeof(T1) == typeof(Dictionary) && rowd is T1 dict) + sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems(_tempPrimarys, "", new T1[] { dict })})"); + else + sb.Append( + _orm.Select() + .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) + .DisableGlobalFilter() + .WhereDynamic(rowd) + .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")"); + }); } } if (string.IsNullOrEmpty(sql)) return null; diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs index 2afc1ca9..f1bb84de 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsertOrUpdate.cs @@ -88,12 +88,18 @@ namespace FreeSql.MySql.Curd { if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => - sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( - _orm.Select() - .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) - .DisableGlobalFilter() - .WhereDynamic(rowd) - .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); + { + sb.Append(" \r\n FROM dual WHERE NOT EXISTS("); + if (typeof(T1) == typeof(Dictionary) && rowd is T1 dict) + sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems(_tempPrimarys, "", new T1[] { dict })})"); + else + sb.Append( + _orm.Select() + .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) + .DisableGlobalFilter() + .WhereDynamic(rowd) + .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")"); + }); } } if (string.IsNullOrEmpty(sql)) return null; diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs index 83d90f1d..2ebea13e 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsertOrUpdate.cs @@ -88,12 +88,18 @@ namespace FreeSql.Odbc.MySql { if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + MySql ", _table.CsName)); sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => - sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( - _orm.Select() - .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) - .DisableGlobalFilter() - .WhereDynamic(rowd) - .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); + { + sb.Append(" \r\n FROM dual WHERE NOT EXISTS("); + if (typeof(T1) == typeof(Dictionary) && rowd is T1 dict) + sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems(_tempPrimarys, "", new T1[] { dict })})"); + else + sb.Append( + _orm.Select() + .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) + .DisableGlobalFilter() + .WhereDynamic(rowd) + .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")"); + }); } } if (string.IsNullOrEmpty(sql)) return null; diff --git a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs index 66608f4d..857dd3a6 100644 --- a/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs +++ b/Providers/FreeSql.Provider.Sqlite/Curd/SqliteInsertOrUpdate.cs @@ -64,13 +64,18 @@ namespace FreeSql.Sqlite.Curd else { if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + Sqlite ", _table.CsName)); - sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => - sb.Append(" \r\n WHERE NOT EXISTS(").Append( - _orm.Select() - .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) - .DisableGlobalFilter() - .WhereDynamic(rowd) - .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); + sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => { + sb.Append(" \r\n WHERE NOT EXISTS("); + if (typeof(T1) == typeof(Dictionary) && rowd is T1 dict) + sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems(_tempPrimarys, "", new T1[] { dict })})"); + else + sb.Append( + _orm.Select() + .AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) + .DisableGlobalFilter() + .WhereDynamic(rowd) + .Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")"); + }); } } if (string.IsNullOrEmpty(sql)) return null;