From 4f66451c20fc7a3fc74d15e64fb32af2de163f14 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Wed, 21 Sep 2022 14:27:03 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20UpdateDict=20=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20SET=20NULL=20=E7=9A=84=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=9B#1257?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 81 ++++++++++--------- FreeSql.DbContext/FreeSql.DbContext.xml | 9 +++ .../Internal/CommonProvider/UpdateProvider.cs | 6 +- 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 54fbbee9..95dd884c 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -362,10 +362,13 @@ namespace base_entity public string code { get; set; } public string parentcode { get; set; } public string name { get; set; } + [Column(MapType = typeof(string))] + public string JoinTest01Enum { get; set; } [JoinCondition("a.parentcode = b.code")] public JoinTest01 Parent { get; set; } } + public enum JoinTest01Enum { f1, f2, f3 } static void Main(string[] args) { @@ -424,6 +427,45 @@ namespace base_entity BaseEntity.Initialization(fsql, () => _asyncUow.Value); #endregion + + + Dictionary dic = new Dictionary(); + dic.Add("id", 1); + dic.Add("name", "xxxx"); + var diclist = new List>(); + diclist.Add(dic); + diclist.Add(new Dictionary + { + ["id"] = 2, + ["name"] = "123,1234,123444" + }); + + var sqss = fsql.InsertDict(dic).AsTable("table1").ToSql(); + var sqss2 = fsql.InsertDict(diclist).AsTable("table1").ToSql(); + sqss = fsql.InsertDict(dic).AsTable("table1").NoneParameter(false).ToSql(); + sqss2 = fsql.InsertDict(diclist).AsTable("table1").NoneParameter(false).ToSql(); + + dic["xxx"] = null; + var sqlupd1 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").ToSql(); + var sqlupd2 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").ToSql(); + var sqlupd11 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql(); + var sqlupd22 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql(); + + var sqldel1 = fsql.DeleteDict(dic).AsTable("table1").ToSql(); + var sqldel2 = fsql.DeleteDict(diclist).AsTable("table1").ToSql(); + diclist[1]["title"] = "newtitle"; + var sqldel3 = fsql.DeleteDict(diclist).AsTable("table1").ToSql(); + diclist.Clear(); + diclist.Add(new Dictionary + { + ["id"] = 1 + }); + diclist.Add(new Dictionary + { + ["id"] = 2 + }); + var sqldel4 = fsql.DeleteDict(diclist).AsTable("table1").ToSql(); + fsql.Aop.ParseExpression += (_, e) => { if (e.Expression is MemberExpression memExp == false) return; @@ -447,6 +489,7 @@ namespace base_entity return; } if (parmExp == null) return; + if (e.Tables == null) return; var oldTables = e.Tables.ToArray(); var result = e.FreeParse(e.Expression); for (var a = oldTables.Length; a < e.Tables.Count; a++) @@ -467,6 +510,8 @@ namespace base_entity var joinsql1 = fsql.Select() .Include(a => a.Parent.Parent) .Where(a => a.Parent.Parent.code == "001") + .Where(a => a.JoinTest01Enum == JoinTest01Enum.f3.ToString()) + .Where(a => object.Equals(a.JoinTest01Enum, JoinTest01Enum.f3)) .ToSql(); @@ -769,42 +814,6 @@ namespace base_entity } - Dictionary dic = new Dictionary(); - dic.Add("id", 1); - dic.Add("name", "xxxx"); - var diclist = new List>(); - diclist.Add(dic); - diclist.Add(new Dictionary - { - ["id"] = 2, - ["name"] = "123,1234,123444" - }); - - var sqss = fsql.InsertDict(dic).AsTable("table1").ToSql(); - var sqss2 = fsql.InsertDict(diclist).AsTable("table1").ToSql(); - sqss = fsql.InsertDict(dic).AsTable("table1").NoneParameter(false).ToSql(); - sqss2 = fsql.InsertDict(diclist).AsTable("table1").NoneParameter(false).ToSql(); - - var sqlupd1 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").ToSql(); - var sqlupd2 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").ToSql(); - var sqlupd11 = fsql.UpdateDict(dic).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql(); - var sqlupd22 = fsql.UpdateDict(diclist).AsTable("table1").WherePrimary("id").NoneParameter(false).ToSql(); - - var sqldel1 = fsql.DeleteDict(dic).AsTable("table1").ToSql(); - var sqldel2 = fsql.DeleteDict(diclist).AsTable("table1").ToSql(); - diclist[1]["title"] = "newtitle"; - var sqldel3 = fsql.DeleteDict(diclist).AsTable("table1").ToSql(); - diclist.Clear(); - diclist.Add(new Dictionary - { - ["id"] = 1 - }); - diclist.Add(new Dictionary - { - ["id"] = 2 - }); - var sqldel4 = fsql.DeleteDict(diclist).AsTable("table1").ToSql(); - var sql1 = fsql.Select() .RawJoin("FULL JOIN UserGroup b ON b.id = a.GroupId") .Where((a, b) => a.IsDeleted == false) 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/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index 6f82de5b..964c2e01 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -461,8 +461,10 @@ namespace FreeSql.Internal.CommonProvider var tempDict = new Dictionary(); foreach (var item in dicType) foreach (string key in item.Keys) - if (!tempDict.ContainsKey(key) && !(item[key] is null)) - tempDict[key] = item[key]; + { + if (!tempDict.ContainsKey(key)) tempDict[key] = item[key]; + else if (!(item[key] is null)) tempDict[key] = item[key]; + } UpdateProvider>.GetDictionaryTableInfo(tempDict, orm, ref table); return; }