对包含的对象使用Include扩展名

时间:2014-08-20 08:00:07

标签: c# entity-framework-4 ef-code-first

我首先使用EF和代码。我创建了一个User对象,其中包含对象Role的列表。每个Role对象都包含Form类型的对象。我想获得特定用户的所有角色,包括“表单”对象。

为了更好地理解:用户1< - > n角色1< - > 1表格

我尝试过类似的东西:

DBContext.Users.Include(u => u.Roles.AsQueryable().Include(i=>i.Form)).ToList().Where(r => r.Username.Equals(id)).FirstOrDefault<User>();

这导致:

Include路径表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,使用Select运算符作为集合导航属性。参数名称:路径

User user = DBContext.Users.Include(u =>     u.Roles.AsQueryable().Include(i=>i.Form)).ToList().Where(r =>    r.Username.Equals(id)).FirstOrDefault<User>();
List<Role> roles = user.Roles.AsQueryable().Include(r=>r.Form).ToList(); 

这不会抛出任何异常,但Form对象不包含在Role对象中。

如何在包含的对象上使用include?有没有办法在linq表达式完成后包含“对象”? 谢谢你的问候

[编辑]为了更好地理解我的模型的外观

public class User
{
    //some properties
    public virtual List<Role> Roles { get; set; }
}
public class Role
{
    //some properties
    public virtual Form Form { get; set; }
}
public class Form
{
    //some properties
}

1 个答案:

答案 0 :(得分:1)

你不能在另一个包含中包含。使用linq表达式包含子路径的正确方法是使用select

DBContext.Users.Include(u =>u.Roles.Select(i=>i.Form)).ToList()