在被包含的对象上使用Include扩展
本文关键字:Include 扩展 对象 包含 | 更新日期: 2023-09-27 18:18:43
我首先使用EF和代码。我创建了一个User对象,其中包含对象Role的列表。每个Role对象包含一个Form类型的对象。我想获得一个特定用户的所有角色,包括"Form"对象。
为了更好地理解:user 1<->n role 1<-> 1 Form
我试过这样做:
DBContext.Users.Include(u => u.Roles.AsQueryable().Include(i=>i.Form)).ToList().Where(r => r.Username.Equals(id)).FirstOrDefault<User>();
结果是:
Include路径表达式必须引用在该类型上定义的导航属性。对引用导航属性使用点点路径,对集合导航属性使用Select操作符。参数名称:path
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
}
不能在另一个include中执行include。使用linq表达式包含子路径的正确方法是使用select
DBContext.Users.Include(u =>u.Roles.Select(i=>i.Form)).ToList()