0
问题: 如何仅通过实体框架查询“admin”角色的“功能”。如何使用Entity Framework查询“admin”角色的“功能”
查询结果将是一个“函数”树结构。
用途: 实体框架6
我尝试这个代码,但数据的儿子装等作用;我尝试很多方法,但没有工作。
var role = _ew.Query<Function>().Where(m => m.Roles.Any(r => r.Title == "admin")).ToList();
这是模型:
public class Function
{
public int Id { get; set; }
public string Title { get; set; }
public string Action { get; set; }
public string Controller { get; set; }
public string Icon { get; set; }
public virtual Function Parent { get; set; }
public virtual ICollection<Function> Functions { get; set; }
public int Depth { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Member> Members { get; set; }
public virtual ICollection<Function> Functions { get; set; }
}
public class Member
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public virtual Role Role { get; set; }
}
这是数据:
var roles = new List<Role>
{
new Role {Title = "admin"},
new Role {Title = "wubo"}
};
context.Roles.AddOrUpdate(m => m.Title, roles.ToArray());
context.SaveChanges();
var admin = context.Roles.FirstOrDefault(m => m.Title == "admin");
var wubo = context.Roles.FirstOrDefault(m => m.Title == "wubo");
var funcs = new List<Function>
{
new Function
{
Title = "admin",
Roles = new List<Role> {admin},
Functions = new List<Function>
{
new Function
{
Title = "admin1",
Roles = new List<Role> {admin},
Functions = new List<Function>
{
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "wubo", Roles = new List<Role> {wubo}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "wubo1", Roles = new List<Role> {wubo}},
}
},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "wubo6", Roles = new List<Role> {wubo}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
}
},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "wubo2", Roles = new List<Role> {wubo}},
new Function {Title = "admin", Roles = new List<Role> {admin}},
new Function {Title = "wubo3", Roles = new List<Role> {wubo}},
new Function {Title = "wubo4", Roles = new List<Role> {wubo}},
new Function {Title = "wubo5", Roles = new List<Role> {wubo}},
new Function {Title = "admin", Roles = new List<Role> {admin}}
};
context.Functions.AddOrUpdate(m => m.Title, funcs.ToArray());
context.SaveChanges();
var member = new List<Member>
{
new Member {UserName = "admin", Password = "000", Role = admin},
new Member {UserName = "wubo", Password = "000", Role = wubo}
};
context.Members.AddOrUpdate(m => m.UserName, member.ToArray());
context.SaveChanges();
试试这个'context.Function.Where(fn => fn.Roles.All(role => role.Title ==“admin”))' – Developer
或者如果你确定一个函数不会有多个管理角色,然后'context.Function.Where(fn => fn.Roles.Count()== 1 && fn.Roles.FirstOrDefault()。Title ==“admin”)' – Developer