From 4c2fab706c526e6fcc949997dcfd76aa50abca95 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Tue, 2 Aug 2022 18:55:18 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BC=98=E5=8C=96=20=E5=AD=90=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=88=AB=E5=90=8D=E4=B8=BA=20a=20=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5=EF=BC=9B#1201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql.DbContext/FreeSql.DbContext.xml | 18 ++++++++++++++++++ .../PgArrayToMany/LazyLoadingNotFundTest.cs | 8 ++++---- .../PgArrayToMany/LazyLoadingTest .cs | 8 ++++---- .../PostgreSQL/PgArrayToMany/NormalTest.cs | 8 ++++---- .../ObservableCollectionLazyLoadingTest.cs | 8 ++++---- .../PgArrayToMany/ObservableCollectionTest.cs | 8 ++++---- .../SqlServer/Curd/SqlServerSelectTest.cs | 7 +++++++ .../Sqlite/Curd/SqliteSelectTest.cs | 4 ++-- FreeSql/Internal/CommonExpression.cs | 7 ++++++- 9 files changed, 53 insertions(+), 23 deletions(-) diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml index 594fbad3..26522f10 100644 --- a/FreeSql.DbContext/FreeSql.DbContext.xml +++ b/FreeSql.DbContext/FreeSql.DbContext.xml @@ -733,6 +733,15 @@ + + + 根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类 + + + + + + 创建普通数据上下文档对象 @@ -791,5 +800,14 @@ + + + 批量注入 Repository,可以参考代码自行调整 + + + + + + diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingNotFundTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingNotFundTest.cs index 1bded85f..ea5d2341 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingNotFundTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingNotFundTest.cs @@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username"" FROM ""pgarray_tomany_user_lazyloading_notfound"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_role_lazyloading_notfound"" b - WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1') + FROM ""pgarray_tomany_role_lazyloading_notfound"" sub_b + WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1') limit 1))", users5Select.ToSql()); var users5 = users5Select.ToList(); Assert.Equal(4, users5.Count); @@ -82,8 +82,8 @@ WHERE (exists(SELECT 1 Assert.Equal(@"SELECT a.""roleid"", a.""rolename"" FROM ""pgarray_tomany_role_lazyloading_notfound"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_user_lazyloading_notfound"" b - WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1') + FROM ""pgarray_tomany_user_lazyloading_notfound"" sub_b + WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1') limit 1))", roles5Select.ToSql()); var roles5 = roles5Select.ToList(); Assert.Equal(2, roles5.Count); diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingTest .cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingTest .cs index 834d83b8..f939b390 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingTest .cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/LazyLoadingTest .cs @@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username"" FROM ""pgarray_tomany_user_lazyloading"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_role_lazyloading"" b - WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1') + FROM ""pgarray_tomany_role_lazyloading"" sub_b + WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1') limit 1))", users5Select.ToSql()); var users5 = users5Select.ToList(); Assert.Equal(4, users5.Count); @@ -82,8 +82,8 @@ WHERE (exists(SELECT 1 Assert.Equal(@"SELECT a.""roleid"", a.""rolename"" FROM ""pgarray_tomany_role_lazyloading"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_user_lazyloading"" b - WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1') + FROM ""pgarray_tomany_user_lazyloading"" sub_b + WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1') limit 1))", roles5Select.ToSql()); var roles5 = roles5Select.ToList(); Assert.Equal(2, roles5.Count); diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/NormalTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/NormalTest.cs index a697dc62..db02b613 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/NormalTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/NormalTest.cs @@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username"" FROM ""pgarray_tomany_user_normal"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_role_normal"" b - WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1') + FROM ""pgarray_tomany_role_normal"" sub_b + WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1') limit 1))", users5Select.ToSql()); var users5 = users5Select.ToList(); Assert.Equal(4, users5.Count); @@ -82,8 +82,8 @@ WHERE (exists(SELECT 1 Assert.Equal(@"SELECT a.""roleid"", a.""rolename"" FROM ""pgarray_tomany_role_normal"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_user_normal"" b - WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1') + FROM ""pgarray_tomany_user_normal"" sub_b + WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1') limit 1))", roles5Select.ToSql()); var roles5 = roles5Select.ToList(); Assert.Equal(2, roles5.Count); diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionLazyLoadingTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionLazyLoadingTest.cs index 29d9d271..0e923cfe 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionLazyLoadingTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionLazyLoadingTest.cs @@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username"" FROM ""pgarray_tomany_user_observablecollection_lazyloading"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_role_observablecollection_lazyloading"" b - WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1') + FROM ""pgarray_tomany_role_observablecollection_lazyloading"" sub_b + WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1') limit 1))", users5Select.ToSql()); var users5 = users5Select.ToList(); Assert.Equal(4, users5.Count); @@ -82,8 +82,8 @@ WHERE (exists(SELECT 1 Assert.Equal(@"SELECT a.""roleid"", a.""rolename"" FROM ""pgarray_tomany_role_observablecollection_lazyloading"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_user_observablecollection_lazyloading"" b - WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1') + FROM ""pgarray_tomany_user_observablecollection_lazyloading"" sub_b + WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1') limit 1))", roles5Select.ToSql()); var roles5 = roles5Select.ToList(); Assert.Equal(2, roles5.Count); diff --git a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionTest.cs b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionTest.cs index 671dadca..052797af 100644 --- a/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/PostgreSQL/PgArrayToMany/ObservableCollectionTest.cs @@ -64,8 +64,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username"" FROM ""pgarray_tomany_user_observablecollection"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_role_observablecollection"" b - WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1') + FROM ""pgarray_tomany_role_observablecollection"" sub_b + WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1') limit 1))", users5Select.ToSql()); var users5 = users5Select.ToList(); Assert.Equal(4, users5.Count); @@ -83,8 +83,8 @@ WHERE (exists(SELECT 1 Assert.Equal(@"SELECT a.""roleid"", a.""rolename"" FROM ""pgarray_tomany_role_observablecollection"" a WHERE (exists(SELECT 1 - FROM ""pgarray_tomany_user_observablecollection"" b - WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1') + FROM ""pgarray_tomany_user_observablecollection"" sub_b + WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1') limit 1))", roles5Select.ToSql()); var roles5 = roles5Select.ToList(); Assert.Equal(2, roles5.Count); diff --git a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs index e1054ddb..38f085d6 100644 --- a/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/SqlServer/Curd/SqlServerSelectTest.cs @@ -850,6 +850,13 @@ WHERE (((a.[Name]) in (SELECT s.[Title] as1 .Any() ).Any() ).ToList(); + + var sqlAliasA = select.Where(p => select.Where(a => a.Id == p.Id).Any()).ToSql(); + Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime] +FROM [tb_topic22] a +WHERE (exists(SELECT TOP 1 1 + FROM [tb_topic22] sub_a + WHERE (sub_a.[Id] = a.[Id])))", sqlAliasA); } [Fact] public void GroupBy() diff --git a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs index 3285c885..8898e5a7 100644 --- a/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs +++ b/FreeSql.Tests/FreeSql.Tests/Sqlite/Curd/SqliteSelectTest.cs @@ -1143,8 +1143,8 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title"" }); Assert.Equal(@"SELECT a.""Id"" as1, ifnull((SELECT max(a.""Guid"") FROM ""TestTypeInfo_01"" a), 0) as2, exists(SELECT 1 - FROM ""TestTypeInfo_01"" b - WHERE (b.""ParentId"" = a.""Id"") AND (b.""Name"" = 'xx') + FROM ""TestTypeInfo_01"" sub_b + WHERE (sub_b.""ParentId"" = a.""Id"") AND (sub_b.""Name"" = 'xx') limit 0,1) as3, exists(SELECT 1 FROM ""TestTypeInfo_01"" b WHERE (b.""Name"" = 'xx') AND (b.""ParentId"" = a.""Id"") diff --git a/FreeSql/Internal/CommonExpression.cs b/FreeSql/Internal/CommonExpression.cs index f0601e3b..853e11c1 100644 --- a/FreeSql/Internal/CommonExpression.cs +++ b/FreeSql/Internal/CommonExpression.cs @@ -1286,7 +1286,11 @@ namespace FreeSql.Internal else { for (var gai = 0; gai < fsqlTypeGenericArgs.Length && gai < argExpLambda.Parameters.Count; gai++) - fsqltables[gai].Alias = argExpLambda.Parameters[gai].Name; + { + var alias = argExpLambda.Parameters[gai].Name; + if (fsqltables.Any(x => x.Type == SelectTableInfoType.Parent && x.Alias == alias)) alias = $"sub_{alias}"; + fsqltables[gai].Alias = alias; + } } } } @@ -2343,6 +2347,7 @@ namespace FreeSql.Internal void LocalSetSelectProviderAlias(string alias) { if (selectSetAliased) return; + if (new[] { "a", "b", "c", "d" }.Contains(alias)) alias = $"sub_{alias}"; selectSetAliased = true; select._tables[0].Alias = alias; select._tables[0].AliasInit = alias;