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)