繁体   English   中英

Entity Framework Core 多对多查询产生性能最低的查询

[英]Entity Framework Core many-to-many query produces least performant query

我有一个User和一个Role表。 它们具有多对多关系,并且 EF Core 5 会自动生成一个连接表。 我有一个场景,我需要获取属于特定用户的角色名称。

我正在编写以下查询:

await dbContext.Role
               .AsNoTracking().IgnoreQueryFilters()
               .Where(x => x.Users.Any(y => y.Id == user.Id))
               .Select(x => x.Name).ToListAsync();

产生以下 SQL

SELECT [r].[Name]
FROM [Role] AS [r]
WHERE EXISTS (
    SELECT 1
    FROM [UserRole] AS [u]
    INNER JOIN [User] AS [u0] ON [u].[UsersId] = [u0].[Id]
    WHERE ([r].[Id] = [u].[RolesId]) AND ([u0].[Id] = 1)
)

我想产生以下查询

SELECT [r].[Name]
FROM [Role] AS [r]
INNER JOIN [UserRole] AS [u] on u.RolesId = r.Id
WHERE u.UsersId = 1

哪个更快。

如何才能做到这一点?

查询连接表

dbContext.UserRoles.Where(ur => ur.UserId == user.UserId).Select(ur => ur.Role.Name);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM