首页 > 解决方案 > 使用 DbContext 和 ADO.NET 的良好查询不返回任何结果

问题描述

我需要在我的数据库上下文中运行以下查询。

SELECT u.[Email],
u.[EmailConfirmed],
u.[PhoneNumber],
STRING_AGG(r.[Name], ', ') AS Roles
FROM [AspNetUsers] u
LEFT OUTER JOIN [AspNetUserRoles] ur ON ur.UserId = u.Id
LEFT OUTER JOIN [AspNetRoles] r ON r.Id = ur.RoleId
GROUP BY u.[Email], u.[EmailConfirmed], u.[PhoneNumber]

当我在查询窗口中运行它时,我得到四个结果。所以我想出了以下代码。

string UserQuery = @"SELECT u.[Email],
u.[EmailConfirmed],
u.[PhoneNumber],
STRING_AGG(r.[Name], ', ') AS Roles
FROM [AspNetUsers] u
LEFT OUTER JOIN [AspNetUserRoles] ur ON ur.UserId = u.Id
LEFT OUTER JOIN [AspNetRoles] r ON r.Id = ur.RoleId
GROUP BY u.[Email], u.[EmailConfirmed], u.[PhoneNumber]";

var conn = DbContext.Database.GetDbConnection();
using var cmd = conn.CreateCommand();
cmd.CommandText = UserQuery;
DbContext.Database.OpenConnection();
using var reader = cmd.ExecuteReader();
while (reader.NextResult())
{
    Users.Add(new UserViewModel
    {
        Email = (string)reader["Email"],
        EmailConfirmed = (bool)reader["EmailConfirmed"],
        Phone = (string)reader["PhoneNumber"],
        Role = (string)reader["Roles"]
    });
}

此代码运行没有错误,但第一次调用reader.NextResult()返回 false!

谁能看到我错过了什么?

标签: c#asp.net-coreentity-framework-coreentity-framework-6ado.net

解决方案


应该reader.Read()reader.NextResult()带回下一个结果

看:

SqlDataReader.Read 和 SqlDataReader.NextResult 之间的区别


推荐阅读