mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	- 修复 AsTreeCte 开启自动迁移时,错误的创建了 as_tree_cte 表;#476
This commit is contained in:
		@@ -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>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,14 +13,14 @@ 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 startTime = DateTime.Now;
 | 
				
			||||||
                var endTime = DateTime.Now;
 | 
					                var endTime = DateTime.Now;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -37,6 +37,7 @@ namespace FreeSql.Tests.Issues
 | 
				
			|||||||
                    })
 | 
					                    })
 | 
				
			||||||
                    .Count();
 | 
					                    .Count();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Table(Name = "V_HospitalReport")]
 | 
					        [Table(Name = "V_HospitalReport")]
 | 
				
			||||||
        public class V_HospitalReport
 | 
					        public class V_HospitalReport
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,13 +13,14 @@ 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;
 | 
				
			||||||
@@ -32,6 +33,7 @@ namespace FreeSql.Tests.Issues
 | 
				
			|||||||
                        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")]
 | 
				
			||||||
        public class V_HospitalReport
 | 
					        public class V_HospitalReport
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,14 +14,14 @@ 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
 | 
					                var orderSql = fsql
 | 
				
			||||||
                    .Select<PayOrder>()
 | 
					                    .Select<PayOrder>()
 | 
				
			||||||
                    .As(nameof(PayOrder).ToLower())
 | 
					                    .As(nameof(PayOrder).ToLower())
 | 
				
			||||||
@@ -37,6 +37,7 @@ namespace FreeSql.Tests.Issues
 | 
				
			|||||||
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)]
 | 
				
			||||||
        public partial class PayOrder
 | 
					        public partial class PayOrder
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										36
									
								
								FreeSql.Tests/FreeSql.Tests/Issues/476.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								FreeSql.Tests/FreeSql.Tests/Issues/476.cs
									
									
									
									
									
										Normal 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; }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user