- 修复 MySql + InsertOrUpdateDict + IfExistsDoNothing 错误;#1601

This commit is contained in:
2881099 2023-08-24 11:20:19 +08:00
parent 3ab8bb5ec6
commit dd1f64a772
6 changed files with 57 additions and 44 deletions

View File

@ -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") //.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5")
//.UseQuoteSqlName(false) //.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") //.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); BaseEntity.Initialization(fsql, () => _asyncUow.Value);
#endregion #endregion
var dict = new List<Dictionary<string, object>>();
Dictionary<string, object> d = new Dictionary<string, object>();
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 var xxxc1 = User1.Select.ToSql(a => new
{ {
count = User1.Where(b => b.Id == a.Id).Count() count = User1.Where(b => b.Id == a.Id).Count()

View File

@ -733,15 +733,6 @@
<param name="modelBuilder"></param> <param name="modelBuilder"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
<summary>
根据Assembly扫描所有继承IEntityTypeConfiguration&lt;T&gt;的配置类
</summary>
<param name="codeFirst"></param>
<param name="assembly"></param>
<param name="predicate"></param>
<returns></returns>
</member>
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)"> <member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
<summary> <summary>
创建普通数据上下文档对象 创建普通数据上下文档对象
@ -800,14 +791,5 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -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)); 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) => sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( {
_orm.Select<T1>() sb.Append(" \r\n FROM dual WHERE NOT EXISTS(");
.AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) if (typeof(T1) == typeof(Dictionary<string, object>) && rowd is T1 dict)
.DisableGlobalFilter() sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems<T1>(_tempPrimarys, "", new T1[] { dict })})");
.WhereDynamic(rowd) else
.Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); sb.Append(
_orm.Select<T1>()
.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; if (string.IsNullOrEmpty(sql)) return null;

View File

@ -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)); 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) => sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( {
_orm.Select<T1>() sb.Append(" \r\n FROM dual WHERE NOT EXISTS(");
.AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) if (typeof(T1) == typeof(Dictionary<string, object>) && rowd is T1 dict)
.DisableGlobalFilter() sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems<T1>(_tempPrimarys, "", new T1[] { dict })})");
.WhereDynamic(rowd) else
.Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); sb.Append(
_orm.Select<T1>()
.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; if (string.IsNullOrEmpty(sql)) return null;

View File

@ -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)); 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) => sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) =>
sb.Append(" \r\n FROM dual WHERE NOT EXISTS(").Append( {
_orm.Select<T1>() sb.Append(" \r\n FROM dual WHERE NOT EXISTS(");
.AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) if (typeof(T1) == typeof(Dictionary<string, object>) && rowd is T1 dict)
.DisableGlobalFilter() sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems<T1>(_tempPrimarys, "", new T1[] { dict })})");
.WhereDynamic(rowd) else
.Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); sb.Append(
_orm.Select<T1>()
.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; if (string.IsNullOrEmpty(sql)) return null;

View File

@ -64,13 +64,18 @@ namespace FreeSql.Sqlite.Curd
else else
{ {
if (_tempPrimarys.Any() == false) throw new Exception(CoreStrings.Entity_Must_Primary_Key("fsql.InsertOrUpdate + IfExistsDoNothing + Sqlite ", _table.CsName)); 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) => sql = insert.ToSqlValuesOrSelectUnionAllExtension101(false, (rowd, idx, sb) => {
sb.Append(" \r\n WHERE NOT EXISTS(").Append( sb.Append(" \r\n WHERE NOT EXISTS(");
_orm.Select<T1>() if (typeof(T1) == typeof(Dictionary<string, object>) && rowd is T1 dict)
.AsTable((_, __) => _tableRule?.Invoke(__)).AsType(_table.Type) sb.Append($"SELECT 1 FROM {_commonUtils.QuoteSqlName(_tableRule(null))} WHERE {_commonUtils.WhereItems<T1>(_tempPrimarys, "", new T1[] { dict })})");
.DisableGlobalFilter() else
.WhereDynamic(rowd) sb.Append(
.Limit(1).ToSql("1").Replace(" \r\n", " \r\n ")).Append(")")); _orm.Select<T1>()
.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; if (string.IsNullOrEmpty(sql)) return null;