From 9b80f8cd53ec2485faf89afc9c4ce3afb3a1e038 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Mon, 29 Jul 2019 16:35:36 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20IInsert.InsertIdentity?= =?UTF-8?q?=20=E5=8F=AF=E6=8F=92=E5=85=A5=E8=87=AA=E5=A2=9E=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.Tests/FreeSql.Tests/UnitTest1.cs | 1 + FreeSql/FreeSql.xml | 6 +++ FreeSql/Interface/Curd/IInsert.cs | 6 +++ .../Internal/CommonProvider/InsertProvider.cs | 51 +++++++++++-------- .../Curd/OracleInsert.cs | 44 ++++++++-------- 5 files changed, 64 insertions(+), 44 deletions(-) diff --git a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs index 5bd98ca9..45a2077c 100644 --- a/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs +++ b/FreeSql.Tests/FreeSql.Tests/UnitTest1.cs @@ -322,6 +322,7 @@ namespace FreeSql.Tests [Fact] public void Test1() { + //g.sqlite.Aop.ParseExpression += parseExp; var sqddddl = g.sqlite.Select().ToSql(t => t.OptionsEntity04 == "1".TryTo()); diff --git a/FreeSql/FreeSql.xml b/FreeSql/FreeSql.xml index e03bc565..5c6d9d2b 100644 --- a/FreeSql/FreeSql.xml +++ b/FreeSql/FreeSql.xml @@ -649,6 +649,12 @@ lambda选择列 + + + 指定可插入自增字段 + + + 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置 diff --git a/FreeSql/Interface/Curd/IInsert.cs b/FreeSql/Interface/Curd/IInsert.cs index 09184d67..aa43198c 100644 --- a/FreeSql/Interface/Curd/IInsert.cs +++ b/FreeSql/Interface/Curd/IInsert.cs @@ -54,6 +54,12 @@ namespace FreeSql /// IInsert IgnoreColumns(Expression> columns); + /// + /// 指定可插入自增字段 + /// + /// + IInsert InsertIdentity(); + /// /// 不使用参数化,可通过 IFreeSql.CodeFirst.IsNotCommandParameter 全局性设置 /// diff --git a/FreeSql/Internal/CommonProvider/InsertProvider.cs b/FreeSql/Internal/CommonProvider/InsertProvider.cs index ee4a3d4b..04ae09d6 100644 --- a/FreeSql/Internal/CommonProvider/InsertProvider.cs +++ b/FreeSql/Internal/CommonProvider/InsertProvider.cs @@ -21,7 +21,7 @@ namespace FreeSql.Internal.CommonProvider protected Dictionary _ignore = new Dictionary(StringComparer.CurrentCultureIgnoreCase); protected TableInfo _table; protected Func _tableRule; - protected bool _noneParameter; + protected bool _noneParameter, _insertIdentity; protected DbParameter[] _params; protected DbTransaction _transaction; protected DbConnection _connection; @@ -38,6 +38,7 @@ namespace FreeSql.Internal.CommonProvider protected void ClearData() { + _insertIdentity = false; _source.Clear(); _ignore.Clear(); _params = null; @@ -56,6 +57,12 @@ namespace FreeSql.Internal.CommonProvider return this; } + public IInsert InsertIdentity() + { + _insertIdentity = true; + return this; + } + public IInsert NoneParameter() { _noneParameter = true; @@ -526,12 +533,14 @@ namespace FreeSql.Internal.CommonProvider sb.Append("INSERT INTO ").Append(_commonUtils.QuoteSqlName(_tableRule?.Invoke(_table.DbName) ?? _table.DbName)).Append("("); var colidx = 0; foreach (var col in _table.Columns.Values) - if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) - { - if (colidx > 0) sb.Append(", "); - sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)); - ++colidx; - } + { + if (_ignore.ContainsKey(col.Attribute.Name)) continue; + if (col.Attribute.IsIdentity && _insertIdentity == false) continue; + + if (colidx > 0) sb.Append(", "); + sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)); + ++colidx; + } sb.Append(") VALUES"); _params = _noneParameter ? new DbParameter[0] : new DbParameter[colidx * _source.Count]; var specialParams = new List(); @@ -542,21 +551,23 @@ namespace FreeSql.Internal.CommonProvider sb.Append("("); var colidx2 = 0; foreach (var col in _table.Columns.Values) - if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) + { + if (_ignore.ContainsKey(col.Attribute.Name)) continue; + if (col.Attribute.IsIdentity && _insertIdentity == false) continue; + + if (colidx2 > 0) sb.Append(", "); + object val = col.GetMapValue(d); + if (col.Attribute.IsPrimary && col.Attribute.MapType.NullableTypeOrThis() == typeof(Guid) && (val == null || (Guid)val == Guid.Empty)) + col.SetMapValue(d, val = FreeUtil.NewMongodbId()); + if (_noneParameter) + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val)); + else { - if (colidx2 > 0) sb.Append(", "); - object val = col.GetMapValue(d); - if (col.Attribute.IsPrimary && col.Attribute.MapType.NullableTypeOrThis() == typeof(Guid) && (val == null || (Guid)val == Guid.Empty)) - col.SetMapValue(d, val = FreeUtil.NewMongodbId()); - if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val)); - else - { - sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); - _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.Attribute.MapType, val); - } - ++colidx2; + sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); + _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.Attribute.MapType, val); } + ++colidx2; + } sb.Append(")"); ++didx; } diff --git a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs index df1d18c4..79cc3192 100644 --- a/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs +++ b/Providers/FreeSql.Provider.Oracle/Curd/OracleInsert.cs @@ -41,17 +41,13 @@ namespace FreeSql.Oracle.Curd var colidx = 0; foreach (var col in _table.Columns.Values) { - if (col.Attribute.IsIdentity == true) - { - _identCol = col; - continue; - } - if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) - { - if (colidx > 0) sbtb.Append(", "); - sbtb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)); - ++colidx; - } + if (col.Attribute.IsIdentity) _identCol = col; + if (_ignore.ContainsKey(col.Attribute.Name)) continue; + if (col.Attribute.IsIdentity && _insertIdentity == false) continue; + + if (colidx > 0) sbtb.Append(", "); + sbtb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)); + ++colidx; } sbtb.Append(") "); @@ -67,21 +63,21 @@ namespace FreeSql.Oracle.Curd var colidx2 = 0; foreach (var col in _table.Columns.Values) { - if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) + if (_ignore.ContainsKey(col.Attribute.Name)) continue; + if (col.Attribute.IsIdentity && _insertIdentity == false) continue; + + if (colidx2 > 0) sb.Append(", "); + object val = col.GetMapValue(d); + if (col.Attribute.IsPrimary && col.Attribute.MapType.NullableTypeOrThis() == typeof(Guid) && (val == null || (Guid)val == Guid.Empty)) + col.SetMapValue(d, val = FreeUtil.NewMongodbId()); + if (_noneParameter) + sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val)); + else { - if (colidx2 > 0) sb.Append(", "); - object val = col.GetMapValue(d); - if (col.Attribute.IsPrimary && col.Attribute.MapType.NullableTypeOrThis() == typeof(Guid) && (val == null || (Guid)val == Guid.Empty)) - col.SetMapValue(d, val = FreeUtil.NewMongodbId()); - if (_noneParameter) - sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.Attribute.MapType, val)); - else - { - sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); - _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.Attribute.MapType, val); - } - ++colidx2; + sb.Append(_commonUtils.QuoteWriteParamter(col.Attribute.MapType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}"))); + _params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.Attribute.MapType, val); } + ++colidx2; } sb.Append(")"); ++didx;