From b542edf12121a93d8b552d10a65d04a5cc22d069 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Sun, 29 Nov 2020 18:52:26 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20ISelect.InsertInto=20?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=88=AB=E5=90=8D=E6=97=B6=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=9A=84=E9=94=99=E8=AF=AF=EF=BC=9B#576?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 9 --- FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml | 15 ++++ FreeSql.Tests/FreeSql.Tests/Issues/576.cs | 81 +++++++++++++++++++ .../SelectProvider/Select0ProviderReader.cs | 2 +- 4 files changed, 97 insertions(+), 10 deletions(-) create mode 100644 FreeSql.Tests/FreeSql.Tests/Issues/576.cs diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index e4208f1f..b3c14870 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -502,14 +502,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml index 010c32bc..bc9a41cc 100644 --- a/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml +++ b/FreeSql.Tests/FreeSql.Tests/FreeSql.Tests.xml @@ -139,6 +139,21 @@ 创建人名称 + + + GUID + + + + + 角色名称 + + + + + 角色排序 + + 保存或添加,如果主键有值则尝试 Update,如果影响的行为 0 则尝试 Insert diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/576.cs b/FreeSql.Tests/FreeSql.Tests/Issues/576.cs new file mode 100644 index 00000000..9d6d9ff4 --- /dev/null +++ b/FreeSql.Tests/FreeSql.Tests/Issues/576.cs @@ -0,0 +1,81 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.DataAnnotations; +using System.Diagnostics; +using System.Reflection; +using System.Text; +using System.Threading; +using Xunit; + +namespace FreeSql.Tests.Issues +{ + public class _576 + { + [ExpressionCall] + public static class _576Extensions + { + public static ThreadLocal expContext = new ThreadLocal(); + + /// + /// 自定义表达式树函数解析 + /// + /// + /// + /// + public static string ToNormalWithinCodeGuid([RawValue] this Guid that, string withinCode) + { + expContext.Value.Result = $"{expContext.Value.ParsedContent["withinCode"]} || '{that.ToString("N")}'"; + return null; + } + } + + [Fact] + public void InsertInto() + { + IFreeSql fsql = g.oracle; + + + fsql.Delete().Where("1=1").ExecuteAffrows(); + var id = Guid.NewGuid().ToString(); + fsql.Insert(new SysRole { Guid = id, RoleName = "role1", Sort = 1 }).ExecuteAffrows(); + + Assert.Equal(1, fsql.Select().Where(a => a.Guid == id).InsertInto("", a => new SysRole + { + Guid = "'x123123dasfafd'", + RoleName = Guid.NewGuid().ToNormalWithinCodeGuid(a.RoleName), + Sort = a.Sort + })); + + var item = fsql.Select().Where(a => a.Guid == "x123123dasfafd").First(); + Assert.NotNull(item); + Assert.True(item.RoleName.StartsWith("role1") && item.RoleName.Length == 37); + Assert.Equal(item.Sort, 1); + } + + [Table(Name = "issues_576_SysRole")] + public partial class SysRole + { + + /// + /// GUID + /// + [JsonProperty, Column(Name = "GUID", DbType = "VARCHAR2(60 BYTE)", IsPrimary = true)] + public string Guid { get; set; } + + /// + /// 角色名称 + /// + [JsonProperty, Column(Name = "ROLE_NAME", DbType = "NVARCHAR2(40)")] + public string RoleName { get; set; } + + /// + /// 角色排序 + /// + [JsonProperty, Column(Name = "SORT")] + public int Sort { get; set; } + } + } +} diff --git a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs index ff4cf074..596eaf33 100644 --- a/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs +++ b/FreeSql/Internal/CommonProvider/SelectProvider/Select0ProviderReader.cs @@ -786,7 +786,7 @@ namespace FreeSql.Internal.CommonProvider } var selectField = string.Join(", ", childs.Select(a => a.DbField)); var selectSql = this.ToSql(selectField); - var insertField = string.Join(", ", childs.Select(a => _commonUtils.QuoteSqlName(tb.Columns[a.CsName].Attribute.Name))); + var insertField = string.Join(", ", childs.Select(a => _commonUtils.QuoteSqlName(tb.ColumnsByCs[a.CsName].Attribute.Name))); var sql = $"INSERT INTO {_commonUtils.QuoteSqlName(tableName)}({insertField})\r\n{selectSql}"; return sql; }