From e62e425646de2e863cd95802832ca27b5945d5b6 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Tue, 14 Apr 2020 23:49:25 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=A2=9E=E5=8A=A0=20IInsert=20InsertColumn?= =?UTF-8?q?s/IgnoreColumns=20=E6=96=B9=E6=B3=95=E9=87=8D=E8=BD=BD=E8=BE=93?= =?UTF-8?q?=E5=85=A5=20string[]=EF=BC=9B#275?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 16 ++++++++++++ FreeSql/FreeSql.xml | 14 +++++++++++ FreeSql/Interface/Curd/IInsert.cs | 13 ++++++++++ .../Internal/CommonProvider/InsertProvider.cs | 25 +++++++++++-------- .../Internal/CommonProvider/UpdateProvider.cs | 4 +-- 5 files changed, 60 insertions(+), 12 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 8cf53748..19225654 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -120,6 +120,13 @@ 清空状态数据 + + + 根据 lambda 条件删除数据 + + + + 添加 @@ -214,6 +221,15 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + 动态Type,在使用 Repository<object> 后使用本方法,指定实体类型 diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index 468cec8e..0b477835 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -907,6 +907,13 @@ lambda选择列 + + + 只插入的列 + + 属性名,或者字段名 + + 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"}) @@ -914,6 +921,13 @@ lambda选择列 + + + 忽略的列 + + 属性名,或者字段名 + + 指定可插入自增字段 diff --git a/FreeSql/Interface/Curd/IInsert.cs b/FreeSql/Interface/Curd/IInsert.cs index 6f09c6bc..025f875b 100644 --- a/FreeSql/Interface/Curd/IInsert.cs +++ b/FreeSql/Interface/Curd/IInsert.cs @@ -48,12 +48,25 @@ namespace FreeSql /// lambda选择列 /// IInsert InsertColumns(Expression> columns); + /// + /// 只插入的列 + /// + /// 属性名,或者字段名 + /// + IInsert InsertColumns(string[] columns); + /// /// 忽略的列,IgnoreColumns(a => a.Name) | IgnoreColumns(a => new{a.Name,a.Time}) | IgnoreColumns(a => new[]{"name","time"}) /// /// lambda选择列 /// IInsert IgnoreColumns(Expression> columns); + /// + /// 忽略的列 + /// + /// 属性名,或者字段名 + /// + IInsert IgnoreColumns(string[] columns); /// /// 指定可插入自增字段 diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index 6834599f..7780ba66 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -442,19 +442,24 @@ namespace FreeSql.Internal.CommonProvider public abstract long ExecuteIdentity(); public abstract List ExecuteInserted(); - public IInsert IgnoreColumns(Expression> columns) + public IInsert IgnoreColumns(Expression> columns) => IgnoreColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null)); + public IInsert InsertColumns(Expression> columns) => InsertColumns(_commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null)); + + public IInsert IgnoreColumns(string[] columns) { - var cols = _commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null).Distinct(); - _ignore.Clear(); - foreach (var col in cols) _ignore.Add(col, true); - return this; - } - public IInsert InsertColumns(Expression> columns) - { - var cols = _commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, columns?.Body, false, null).ToDictionary(a => a, a => true); + var cols = columns.Distinct().ToDictionary(a => a); _ignore.Clear(); foreach (var col in _table.Columns.Values) - if (cols.ContainsKey(col.Attribute.Name) == false && _auditValueChangedDict.ContainsKey(col.Attribute.Name) == false) + if (cols.ContainsKey(col.Attribute.Name) == true || cols.ContainsKey(col.CsName) == true) + _ignore.Add(col.Attribute.Name, true); + return this; + } + public IInsert InsertColumns(string[] columns) + { + var cols = columns.Distinct().ToDictionary(a => a); + _ignore.Clear(); + foreach (var col in _table.Columns.Values) + if (cols.ContainsKey(col.Attribute.Name) == false && cols.ContainsKey(col.CsName) == false && _auditValueChangedDict.ContainsKey(col.Attribute.Name) == false) _ignore.Add(col.Attribute.Name, true); return this; } diff --git a/FreeSql/Internal/CommonProvider/UpdateProvider.cs b/FreeSql/Internal/CommonProvider/UpdateProvider.cs index d4100b04..e3cdd898 100644 --- a/FreeSql/Internal/CommonProvider/UpdateProvider.cs +++ b/FreeSql/Internal/CommonProvider/UpdateProvider.cs @@ -309,7 +309,7 @@ namespace FreeSql.Internal.CommonProvider public IUpdate IgnoreColumns(string[] columns) { - var cols = columns.ToDictionary(a => a); + var cols = columns.Distinct().ToDictionary(a => a); _ignore.Clear(); foreach (var col in _table.Columns.Values) if (cols.ContainsKey(col.Attribute.Name) == true || cols.ContainsKey(col.CsName) == true) @@ -318,7 +318,7 @@ namespace FreeSql.Internal.CommonProvider } public IUpdate UpdateColumns(string[] columns) { - var cols = columns.ToDictionary(a => a); + var cols = columns.Distinct().ToDictionary(a => a); _ignore.Clear(); foreach (var col in _table.Columns.Values) if (cols.ContainsKey(col.Attribute.Name) == false && cols.ContainsKey(col.CsName) == false && _auditValueChangedDict.ContainsKey(col.Attribute.Name) == false)