我有3个具有多对多连接的实体(表):
public class AccUserRole
{
public long Id { get; set; }
public string RoleName { get; set; }
public List<AccAdGroup> Groups { get; set; }
public List<AccScreen> Screens { get; set; }
}
public class AccAdGroup
{
public long Id { get; set; }
public string AdIdent { get; set; }
public List<AccUserRole> Roles { get; set; }
}
public class AccScreen
{
public long Id { get; set; }
public string ScreenIdent { get; set; }
public List<AccUserRole> Roles { get; set; }
}
我想要获取所有角色(包括他们的屏幕和组),这些角色至少有一个指定的组列表(当前用户的组)。所以我使用了这个查询:
List<AccUserRole> userRoles = (from ur in db.AccUserRoles.Include("Groups").Include("Screens")
from g in ur.Groups
where user.Groups.Contains(g.AdIdent)
select ur).ToList();
它获得了正确的角色,但Groups
和Screens
属性为空。看起来EF在使用Include
和第二个from
时遇到了问题。任何关于如何包含属性或重写查询的帮助都将不胜感激。
发布于 2014-09-10 19:26:37
尝试将虚拟关键字添加到类属性中,如下所示:
public class AccUserRole
{
public long Id { get; set; }
public string RoleName { get; set; }
public virtual List<AccAdGroup> Groups { get; set; }
public virtual List<AccScreen> Screens { get; set; }
}
public class AccAdGroup
{
public long Id { get; set; }
public string AdIdent { get; set; }
public virtual List<AccUserRole> Roles { get; set; }
}
public class AccScreen
{
public long Id { get; set; }
public string ScreenIdent { get; set; }
public virtual List<AccUserRole> Roles { get; set; }
}
发布于 2014-09-10 19:47:35
将include移到ToList()
之前。
select ur).Include("Groups").Include("Screens").ToList();
子选择可以消除Include
效应。
如果正在执行紧急加载,则不需要virtual
关键字。通过添加virtual
,您使用的是延迟加载,而不是即时加载。
https://stackoverflow.com/questions/25764005
复制相似问题