DotNetNext / SqlSugar

.Net aot ORM Fastest ORM Simple Easy VB.NET Sqlite orm Oracle ORM Mysql Orm 虚谷数据库 postgresql ORm SqlServer oRm 达梦 ORM 人大金仓 ORM 神通ORM C# ORM , C# ORM .NET ORM NET5 ORM .NET6 ORM ClickHouse orm QuestDb ,TDengine ORM,OceanBase orm,GaussDB orm ,Tidb orm Object/Relational Mapping
https://www.donet5.com/Home/Doc
MIT License
5.19k stars 1.32k forks source link

关于 ThenMapper 的一点疑问:ThenMapper 中使用 Queryable 会一直请求数据库服务吗? #1178

Closed idea-zone closed 12 months ago

idea-zone commented 12 months ago

我使用下面的代码在获取 用户后,关联用户的角色:

 SysUserRoleService service = new SysUserRoleService();
            service.Context.ThenMapper(list, t =>
            {
                t.RoleIds = service.Queryable().Where(ur => ur.UserId == t.Id).Select(t => t.RoleId).ToArray();
            });

执行后,查看 Log 发现 SQL 日志如下:(下面 SELECT "roleid" FROM "userrole" WHERE ( "userid" = X) 是请求了多次数据库吗? )

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT id,loginname,loginpassword,realname,idnumber,telephone,lifestarttime,lifeendtime,idedit,state,nikename,sharefolder,blongcity,mac,deptid FROM public.user 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 2 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 3 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 4 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 5 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 1 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 6 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 7 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 8 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 9 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 10 ) 

[23-07-21 17:11:36]>>【db0 SQL语句】SELECT "roleid" FROM "userrole"  WHERE ( "userid" = 11 ) 
DotNetNext commented 12 months ago

你用法错误要用SetContext

DotNetNext commented 12 months ago

SetContext 是关键 db.Queryable().SetContext(x => x.ParentId, () => item.Id, item).ToList()