【发布时间】:2020-06-22 21:08:41
【问题描述】:
我需要在我的数据库上下文中运行以下查询。
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!
谁能看到我错过了什么?
【问题讨论】:
-
你的上下文是否指向同一个数据库?
-
您的意思是查询工作的同一个数据库?当然是。四个结果证实这是我正在使用的数据库。
-
可能是字符串没有正确转义。你可以试试这个:pastebin.com/Z7KAY9mN
标签: c# asp.net-core entity-framework-core entity-framework-6 ado.net