- 修复 AsTreeCte 开启自动迁移时,错误的创建了 as_tree_cte 表;#476

This commit is contained in:
28810 2020-09-26 14:30:40 +08:00
parent 5a664180c2
commit 8fb330b528
6 changed files with 99 additions and 66 deletions

View File

@ -532,14 +532,5 @@
<param name="that"></param> <param name="that"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members> </members>
</doc> </doc>

View File

@ -13,29 +13,30 @@ namespace FreeSql.Tests.Issues
[Fact] [Fact]
public void SelectTest() public void SelectTest()
{ {
IFreeSql db = new FreeSql.FreeSqlBuilder() 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") .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) .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
.UseGenerateCommandParameterWithLambda(true) .UseGenerateCommandParameterWithLambda(true)
.UseAutoSyncStructure(true) .UseAutoSyncStructure(true)
.UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
.Build(); .Build())
{
var startTime = DateTime.Now;
var endTime = DateTime.Now;
var startTime = DateTime.Now; var cou = db.Select<V_HospitalReport>()
var endTime = DateTime.Now; .Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date)
.GroupBy(a =>
var cou = db.Select<V_HospitalReport>() new
.Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date) {
.GroupBy(a => a.HospitalName,
new a.Dep,
{ a.Instrna,
a.HospitalName, a.ConfirmDoctorName,
a.Dep, a.ScheduledDttm.Date
a.Instrna, })
a.ConfirmDoctorName, .Count();
a.ScheduledDttm.Date }
})
.Count();
} }
[Table(Name = "V_HospitalReport")] [Table(Name = "V_HospitalReport")]

View File

@ -13,24 +13,26 @@ namespace FreeSql.Tests.Issues
[Fact] [Fact]
public void SelectTest() public void SelectTest()
{ {
IFreeSql db = new FreeSql.FreeSqlBuilder() 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") .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) .UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
.UseGenerateCommandParameterWithLambda(true) .UseGenerateCommandParameterWithLambda(true)
.UseAutoSyncStructure(true) .UseAutoSyncStructure(true)
.UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
.Build(); .Build())
{
var startTime = DateTime.Now; var startTime = DateTime.Now;
var endTime = DateTime.Now; var endTime = DateTime.Now;
var exp0 = 10; var exp0 = 10;
var cou = db.Select<V_HospitalReport>() var cou = db.Select<V_HospitalReport>()
.Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date) .Where(a => a.ScheduledDttm.Date >= startTime.Date && a.ScheduledDttm.Date <= (endTime.AddDays(1)).Date)
.ToList(a => new .ToList(a => new
{ {
subCount = db.Select<V_HOSPITALREPORT>().Where(b => b.SCHEDULED_DTTM == exp0).Count() subCount = db.Select<V_HOSPITALREPORT>().Where(b => b.SCHEDULED_DTTM == exp0).Count()
}); });
}
} }
[Table(Name = "V_HospitalReport22")] [Table(Name = "V_HospitalReport22")]

View File

@ -14,28 +14,29 @@ namespace FreeSql.Tests.Issues
[Fact] [Fact]
public void SelectTest() public void SelectTest()
{ {
IFreeSql fsql = new FreeSql.FreeSqlBuilder() 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") .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) //.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
.UseGenerateCommandParameterWithLambda(true) .UseGenerateCommandParameterWithLambda(true)
.UseAutoSyncStructure(true) .UseAutoSyncStructure(true)
.UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText)) .UseMonitorCommand(cmd => Trace.WriteLine("\r\n线程" + Thread.CurrentThread.ManagedThreadId + ": " + cmd.CommandText))
.Build(); .Build())
{
var orderSql = fsql
.Select<PayOrder>()
.As(nameof(PayOrder).ToLower())
.Where(p => p.Status == 1)
.ToSql(p => new
{
p.PayOrderId,
p.Money,
p.OrderTime
}, FreeSql.FieldAliasOptions.AsProperty);
var orderSql = fsql Assert.Equal(@"SELECT payorder.""PayOrderId"", payorder.""Money"", payorder.""OrderTime""
.Select<PayOrder>()
.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""
FROM ""pay_order"" payorder FROM ""pay_order"" payorder
WHERE (payorder.""Status"" = 1)", orderSql); WHERE (payorder.""Status"" = 1)", orderSql);
}
} }
[JsonObject(MemberSerialization.OptIn), Table(Name = "pay_order", DisableSyncStructure = true)] [JsonObject(MemberSerialization.OptIn), Table(Name = "pay_order", DisableSyncStructure = true)]

View File

@ -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<AreaEntity>();
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<AreaEntity> Childs { get; set; }
}
}
}

View File

@ -451,6 +451,8 @@ public static partial class FreeSqlGlobalExtensions
}); });
sql2ctePath = $"{sql2ctePath} as cte_path, "; sql2ctePath = $"{sql2ctePath} as cte_path, ";
} }
if (select._orm.CodeFirst.IsAutoSyncStructure)
(select._orm.CodeFirst as CodeFirstProvider)._dicSycedTryAdd(tb.Type, cteName); //#476
var sql2 = select var sql2 = select
.AsAlias((type, old) => type == tb.Type ? old.Replace("wct2", "wct1") : old) .AsAlias((type, old) => type == tb.Type ? old.Replace("wct2", "wct1") : old)
.AsTable((type, old) => type == tb.Type ? cteName : old) .AsTable((type, old) => type == tb.Type ? cteName : old)