一个简单的查询正在生成多个嵌套记录
A simple query is generating multiple nested records
我不确定我是否做错了,或者 Entity Framework 返回了多个嵌套结果,我无法弄清楚为什么或如何阻止它发生。
我正在尝试获取特定角色的用户列表:
return _context.users.Include(user => user.UserRoles)
.ThenInclude(ur => ur.Role).Where(ro => ro.UserRoles.Any(i => i.roleId == role.RoleId)).Take(10).ToList();
我有三个模型:User、UserRoles、Role
用户通过 UserRoles 拥有多个角色
public virtual ICollection<UserRole> UserRoles { get; set; }
UserRole属于User,属于Role
public virtual Role Role { get; set; }
public virtual User User { get; set; }
和角色
public virtual ICollection<UserRole> UserRoles { get; set; }
当我查询给定角色的所有用户列表时,我得到以下类型的结果:
[
{
name: 'xxxx',
email: 'xxxx',
userRoles: [{
userRoleId: '',
roleId: '',
role: {
roleId: '',
name:'',
userRoles: [
{
userRoleId: '',
roleId: '',
user: {
and the loop continues
}
}
]
}
}
]
}
]
我期待以下结果:
[
{
name: 'xxxx',
email: 'xxxx',
userRoles: [{
userRoleId: '',
roleId: '',
role: {
roleId: '',
name:''
}
}
]
}
]
services.AddMvc()
.AddJsonOptions(
options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
);
这个方法主要是为了防止无线循环引用,如果你想改变返回的格式json,你可以尝试下面的解决方法,选择你想要的数据
var data= _context.Users
.Include(user => user.UserRoles)
.ThenInclude(ur => ur.Role)
.Where(ro => ro.UserRoles.Any(i => i.RoleId == roleId))
.Select(u=>new {
name=u.UserName,
userRoles=u.UserRoles.Select(ur=>new {
roleId=ur.RoleId,
role=ur.Role.RoleName
})
})
.ToList();
我不确定我是否做错了,或者 Entity Framework 返回了多个嵌套结果,我无法弄清楚为什么或如何阻止它发生。
我正在尝试获取特定角色的用户列表:
return _context.users.Include(user => user.UserRoles)
.ThenInclude(ur => ur.Role).Where(ro => ro.UserRoles.Any(i => i.roleId == role.RoleId)).Take(10).ToList();
我有三个模型:User、UserRoles、Role
用户通过 UserRoles 拥有多个角色
public virtual ICollection<UserRole> UserRoles { get; set; }
UserRole属于User,属于Role
public virtual Role Role { get; set; }
public virtual User User { get; set; }
和角色
public virtual ICollection<UserRole> UserRoles { get; set; }
当我查询给定角色的所有用户列表时,我得到以下类型的结果:
[
{
name: 'xxxx',
email: 'xxxx',
userRoles: [{
userRoleId: '',
roleId: '',
role: {
roleId: '',
name:'',
userRoles: [
{
userRoleId: '',
roleId: '',
user: {
and the loop continues
}
}
]
}
}
]
}
]
我期待以下结果:
[
{
name: 'xxxx',
email: 'xxxx',
userRoles: [{
userRoleId: '',
roleId: '',
role: {
roleId: '',
name:''
}
}
]
}
]
services.AddMvc() .AddJsonOptions( options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore );
这个方法主要是为了防止无线循环引用,如果你想改变返回的格式json,你可以尝试下面的解决方法,选择你想要的数据
var data= _context.Users
.Include(user => user.UserRoles)
.ThenInclude(ur => ur.Role)
.Where(ro => ro.UserRoles.Any(i => i.RoleId == roleId))
.Select(u=>new {
name=u.UserName,
userRoles=u.UserRoles.Select(ur=>new {
roleId=ur.RoleId,
role=ur.Role.RoleName
})
})
.ToList();