我正在嘗試通過 Dapper 檢索所有具有角色的用戶 - 這是方法和查詢:
public async Task<List<User>> GetUserWithRolesAsync()
{
using var dbConnection = _context.CreateConnection();
var sql = @"select u.Id, u.FirstName, u.LastName, r.Id, r.Name
from User u
inner join UserRole ur on ur.UserId = u.Id
inner join Role r on r.Id = ur.RoleId";
// this line throws exception;
var users = await dbConnection.QueryAsync<User, Role, User>(sql, (user, role) =>
{
user.Role.Add(role);
return user;
}, splitOn: "Id");
var result = users.GroupBy(p => p.Id).Select(g =>
{
var groupedUser = g.First();
groupedUser.Role = g.Select(p => p.Role.Single()).ToList();
return groupedUsers;
});
return result.ToList();
}
這是我得到的錯誤:
關鍵字“User”附近的語法不正確
我該如何解決?
如果需要物體詳細資訊,以下是表定義:
public class User : SqlEntityBase
{
public string FirstName { get; set; }...
public List<Role> Role { get; set; }
}
public class Role : SqlEntityBase
{
public string Name { get; set; }
public List<User> User { get; set; }
}
public class UserRole : SqlEntityBase
{
public int UserId { get; set; }
public int RoleId { get; set; }
public User User { get; set; }
public Role Role { get; set; }
}
uj5u.com熱心網友回復:
假設您使用SQL Server作為資料庫 -User是一個保留的 T-SQL 關鍵字。您應該盡量避免將這些保留關鍵字用于您自己的 db 物件——使用更具描述性、更合適的名稱。
如果您無法更改它 - 那么您必須將該表名放入 SQL 中的方括號(或雙引號)中:
var sql = @"select u.Id, u.FirstName, u.LastName, r.Id, r.Name
from [User] u
inner join UserRole ur on ur.UserId = u.Id
inner join Role r on r.Id = ur.RoleId";
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/353964.html
