[英]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.