From f43d42bc2e8ecdf1fa2166861316571329ea91e9 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 17 Aug 2020 13:59:27 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IAdo.GetDbParamtersByO?= =?UTF-8?q?bject=20=E6=96=B9=E6=B3=95=E8=8E=B7=E5=8F=96=20DbParameter[]?= =?UTF-8?q?=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Examples/base_entity/Program.cs | 6 ++++++ FreeSql.DbContext/FreeSql.DbContext.xml | 16 ++++++++++++++++ FreeSql/FreeSql.xml | 7 +++++++ FreeSql/Interface/IAdo.cs | 7 +++++++ .../CommonProvider/AdoProvider/AdoProvider.cs | 1 + FreeSql/Internal/UtilsExpressionTree.cs | 5 +++-- 6 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Examples/base_entity/Program.cs b/Examples/base_entity/Program.cs index 0a945606..8f68b189 100644 --- a/Examples/base_entity/Program.cs +++ b/Examples/base_entity/Program.cs @@ -102,6 +102,12 @@ namespace base_entity var names = (fsql.Select() as Select0Provider)._commonUtils.SplitTableName("`Backups.ProductStockBak`"); + var dbparams = fsql.Ado.GetDbParamtersByObject(new { id = 1, name = "xxx" }); + + + + + var sql = fsql.CodeFirst.GetComparisonDDLStatements(typeof(EMSServerModel.Model.User), "testxsx001"); var test01 = EMSServerModel.Model.User.Select.IncludeMany(a => a.Roles).ToList(); diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 68241282..312b0c42 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -130,6 +130,13 @@ 清空状态数据 + + + 根据 lambda 条件删除数据 + + + + 添加 @@ -525,5 +532,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 6134627d..5a5b90aa 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -2467,6 +2467,13 @@ 当前线程的事务 + + + 将 new { id = 1 } 或者 Dictionary<string, object> 转换为 DbParameter[] + + new { id = 1 } 或者 Dictionary<string, object> + + 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 diff --git a/FreeSql/Interface/IAdo.cs b/FreeSql/Interface/IAdo.cs index ba922dc0..afa01638 100644 --- a/FreeSql/Interface/IAdo.cs +++ b/FreeSql/Interface/IAdo.cs @@ -55,6 +55,13 @@ namespace FreeSql DbTransaction TransactionCurrentThread { get; } #endregion + /// + /// 将 new { id = 1 } 或者 Dictionary<string, object> 转换为 DbParameter[] + /// + /// new { id = 1 } 或者 Dictionary<string, object> + /// + DbParameter[] GetDbParamtersByObject(object obj); + /// /// 查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】 /// diff --git a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs index 977621fd..c0c757ea 100644 --- a/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs +++ b/FreeSql/Internal/CommonProvider/AdoProvider/AdoProvider.cs @@ -18,6 +18,7 @@ namespace FreeSql.Internal.CommonProvider protected abstract void ReturnConnection(IObjectPool pool, Object conn, Exception ex); protected abstract DbCommand CreateCommand(); protected abstract DbParameter[] GetDbParamtersByObject(string sql, object obj); + public DbParameter[] GetDbParamtersByObject(object obj) => GetDbParamtersByObject("*", obj); protected bool IsTracePerformance => _util?._orm?.Aop.CommandAfterHandler != null; diff --git a/FreeSql/Internal/UtilsExpressionTree.cs b/FreeSql/Internal/UtilsExpressionTree.cs index ab180445..a90c057a 100644 --- a/FreeSql/Internal/UtilsExpressionTree.cs +++ b/FreeSql/Internal/UtilsExpressionTree.cs @@ -1218,6 +1218,7 @@ namespace FreeSql.Internal public static T[] GetDbParamtersByObject(string sql, object obj, string paramPrefix, Func constructorParamter) { if (string.IsNullOrEmpty(sql) || obj == null) return new T[0]; + var isCheckSql = sql != "*"; var ttype = typeof(T); var type = obj.GetType(); if (type == ttype) return new[] { (T)Convert.ChangeType(obj, type) }; @@ -1227,7 +1228,7 @@ namespace FreeSql.Internal { foreach (var key in dic.Keys) { - if (string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{key}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; + if (isCheckSql && string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{key}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; var val = dic[key]; var valType = val == null ? typeof(string) : val.GetType(); if (valType == ttype) ret.Add((T)Convert.ChangeType(val, ttype)); @@ -1239,7 +1240,7 @@ namespace FreeSql.Internal var ps = type.GetPropertiesDictIgnoreCase().Values; foreach (var p in ps) { - if (string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{p.Name}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; + if (isCheckSql && string.IsNullOrEmpty(paramPrefix) == false && sql.IndexOf($"{paramPrefix}{p.Name}", StringComparison.CurrentCultureIgnoreCase) == -1) continue; var pvalue = p.GetValue(obj, null); if (p.PropertyType == ttype) ret.Add((T)Convert.ChangeType(pvalue, ttype)); else ret.Add(constructorParamter(p.Name, p.PropertyType, pvalue));