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));