From 8fb330b528ccf459cd7ca31adab8f07a37b56076 Mon Sep 17 00:00:00 2001 From: 28810 <28810@YEXIANGQIN> Date: Sat, 26 Sep 2020 14:30:40 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20AsTreeCte=20=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E8=87=AA=E5=8A=A8=E8=BF=81=E7=A7=BB=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84=E5=88=9B=E5=BB=BA=E4=BA=86=20as=5Ft?= =?UTF-8?q?ree=5Fcte=20=E8=A1=A8=EF=BC=9B#476?= 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/Issues/390.cs | 45 ++++++++++--------- FreeSql.Tests/FreeSql.Tests/Issues/462.cs | 34 +++++++------- FreeSql.Tests/FreeSql.Tests/Issues/467.cs | 39 ++++++++-------- FreeSql.Tests/FreeSql.Tests/Issues/476.cs | 36 +++++++++++++++ FreeSql/Extensions/FreeSqlGlobalExtensions.cs | 2 + 6 files changed, 99 insertions(+), 66 deletions(-) create mode 100644 FreeSql.Tests/FreeSql.Tests/Issues/476.cs diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 743835e4..9c6cd88b 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -532,14 +532,5 @@ - - - 批量注入 Repository,可以参考代码自行调整 - - - - - - diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/390.cs b/FreeSql.Tests/FreeSql.Tests/Issues/390.cs index bac347c8..05c5cd96 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/390.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/390.cs @@ -13,29 +13,30 @@ namespace FreeSql.Tests.Issues [Fact] public void SelectTest() { - IFreeSql db = new FreeSql.FreeSqlBuilder() - .UseConnectionString(FreeSql.DataType.Oracle, "user id=1user;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=1") - .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) - .UseGenerateCommandParameterWithLambda(true) - .UseAutoSyncStructure(true) - .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) - .Build(); + using (IFreeSql db = new FreeSql.FreeSqlBuilder() + .UseConnectionString(FreeSql.DataType.Oracle, "user id=1user;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=1") + .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) + .UseGenerateCommandParameterWithLambda(true) + .UseAutoSyncStructure(true) + .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) + .Build()) + { + var startTime = DateTime.Now; + var endTime = DateTime.Now; - var startTime = DateTime.Now; - var endTime = DateTime.Now; - - var cou = db.Select() - .Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date) - .GroupBy(a => - new - { - a.HospitalName, - a.Dep, - a.Instrna, - a.ConfirmDoctorName, - a.ScheduledDttm.Date - }) - .Count(); + var cou = db.Select() + .Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date) + .GroupBy(a => + new + { + a.HospitalName, + a.Dep, + a.Instrna, + a.ConfirmDoctorName, + a.ScheduledDttm.Date + }) + .Count(); + } } [Table(Name = "V_HospitalReport")] diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/462.cs b/FreeSql.Tests/FreeSql.Tests/Issues/462.cs index 0fa0162f..9811134a 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/462.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/462.cs @@ -13,24 +13,26 @@ namespace FreeSql.Tests.Issues [Fact] public void SelectTest() { - IFreeSql db = new FreeSql.FreeSqlBuilder() - .UseConnectionString(FreeSql.DataType.Oracle, "user id=1user;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=1") - .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) - .UseGenerateCommandParameterWithLambda(true) - .UseAutoSyncStructure(true) - .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) - .Build(); + using (var db = new FreeSql.FreeSqlBuilder() + .UseConnectionString(FreeSql.DataType.Oracle, "user id=1user;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=1") + .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) + .UseGenerateCommandParameterWithLambda(true) + .UseAutoSyncStructure(true) + .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) + .Build()) + { - var startTime = DateTime.Now; - var endTime = DateTime.Now; + var startTime = DateTime.Now; + var endTime = DateTime.Now; - var exp0 = 10; - var cou = db.Select() - .Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date) - .ToList(a => new - { - subCount = db.Select().Where(b => b.SCHEDULED_DTTM == exp0).Count() - }); + var exp0 = 10; + var cou = db.Select() + .Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date) + .ToList(a => new + { + subCount = db.Select().Where(b => b.SCHEDULED_DTTM == exp0).Count() + }); + } } [Table(Name = "V_HospitalReport22")] diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/467.cs b/FreeSql.Tests/FreeSql.Tests/Issues/467.cs index 3719b768..708246f2 100644 --- a/FreeSql.Tests/FreeSql.Tests/Issues/467.cs +++ b/FreeSql.Tests/FreeSql.Tests/Issues/467.cs @@ -14,28 +14,29 @@ namespace FreeSql.Tests.Issues [Fact] public void SelectTest() { - IFreeSql fsql = new FreeSql.FreeSqlBuilder() - .UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=1") - //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) - .UseGenerateCommandParameterWithLambda(true) - .UseAutoSyncStructure(true) - .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) - .Build(); + using (IFreeSql fsql = new FreeSql.FreeSqlBuilder() + .UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=1") + //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper) + .UseGenerateCommandParameterWithLambda(true) + .UseAutoSyncStructure(true) + .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) + .Build()) + { + var orderSql = fsql + .Select() + .As(nameof(PayOrder).ToLower()) + .Where(p => p.Status == 1) + .ToSql(p => new + { + p.PayOrderId, + p.Money, + p.OrderTime + }, FreeSql.FieldAliasOptions.AsProperty); - var orderSql = fsql - .Select() - .As(nameof(PayOrder).ToLower()) - .Where(p => p.Status == 1) - .ToSql(p => new - { - p.PayOrderId, - p.Money, - p.OrderTime - }, FreeSql.FieldAliasOptions.AsProperty); - - Assert.Equal(@"SELECT payorder.""PayOrderId"", payorder.""Money"", payorder.""OrderTime"" + Assert.Equal(@"SELECT payorder.""PayOrderId"", payorder.""Money"", payorder.""OrderTime"" FROM ""pay_order"" payorder WHERE (payorder.""Status"" = 1)", orderSql); + } } [JsonObject(MemberSerialization.OptIn), Table(Name = "pay_order", DisableSyncStructure = true)] diff --git a/FreeSql.Tests/FreeSql.Tests/Issues/476.cs b/FreeSql.Tests/FreeSql.Tests/Issues/476.cs new file mode 100644 index 00000000..592ed47f --- /dev/null +++ b/FreeSql.Tests/FreeSql.Tests/Issues/476.cs @@ -0,0 +1,36 @@ +using FreeSql.DataAnnotations; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Threading; +using Xunit; + +namespace FreeSql.Tests.Issues +{ + public class _476 + { + [Fact] + public void SelectTest() + { + var fsql = g.mysql; + var repo = fsql.GetRepository(); + var list = repo.Select.Where(m => m.Name == "辽宁省").AsTreeCte().ToList(); + } + + [Table(Name = "Area476")] + public class AreaEntity + { + [Column(IsIdentity = true)] + public long Id { get; set; } + public string Name { get; set; } + public long ParentId { get; set; } + + [Navigate(nameof(ParentId))] + public AreaEntity Parent { get; set; } + [Navigate(nameof(ParentId))] + public List Childs { get; set; } + } + } +} diff --git a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs index bc78db29..d8657041 100644 --- a/FreeSql/Extensions/FreeSqlGlobalExtensions.cs +++ b/FreeSql/Extensions/FreeSqlGlobalExtensions.cs @@ -451,6 +451,8 @@ public static partial class FreeSqlGlobalExtensions }); sql2ctePath = $"{sql2ctePath} as cte_path, "; } + if (select._orm.CodeFirst.IsAutoSyncStructure) + (select._orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(tb.Type, cteName); //#476 var sql2 = select .AsAlias((type, old) => type == tb.Type ? old.Replace("wct2", "wct1") : old) .AsTable((type, old) => type == tb.Type ? cteName : old)