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;