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