SQL select 语句通过 dapper 抛出异常
SQL select statement throws exception via dapper
我正在尝试通过 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();
}
这是我得到的错误:
Incorrect syntax near the keyword 'User'
我该如何解决?
如果需要实体详细信息,这里是 table 定义:
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; }
}
假设您使用 SQL Server 作为数据库 - User
是保留的 T-SQL 关键字。您应该尽量避免为您自己的数据库对象使用这些保留关键字 - 使用更具描述性、更合适的名称。
如果您无法更改它 - 那么您必须将 table 名称放入 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";
我正在尝试通过 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();
}
这是我得到的错误:
Incorrect syntax near the keyword 'User'
我该如何解决?
如果需要实体详细信息,这里是 table 定义:
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; }
}
假设您使用 SQL Server 作为数据库 - User
是保留的 T-SQL 关键字。您应该尽量避免为您自己的数据库对象使用这些保留关键字 - 使用更具描述性、更合适的名称。
如果您无法更改它 - 那么您必须将 table 名称放入 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";