实体框架为包含属性返回null

Evg*_*rov 5 .net c# sql entity-framework

我有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; }
}
Run Code Online (Sandbox Code Playgroud)

我想获得至少有一个指定的组列表(当前用户的组)的所有角色(包括他们的屏幕和组).所以我使用了这个查询:

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();
Run Code Online (Sandbox Code Playgroud)

它得到正确的角色,但是GroupsScreens属性为null.看起来EF有使用Include和第二的问题from.任何有关如何包含属性或重写查询的帮助将不胜感激.

小智 1

尝试将 virtual 关键字添加到类属性中,如下所示:

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; }
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么这样可以解决问题呢? (2认同)