实体框架从具有子实体的父实体中提取简单列表
本文关键字:实体 提取 简单 列表 框架 | 更新日期: 2023-09-27 18:33:38
我有两个类:
public class Profile
{
public int ProfileID { get; set; }
public string ProfileDescription { get; set; }
public int DisplayOrder { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
和
public class Role
{
public int RoleID { get; set; }
public string RoleDescription { get; set; }
public int DisplayOrder { get; set; }
public virtual ICollection<Profile> Profiles { get; set; }
}
与 DbContext
public DbSet<Profile> Profiles { get; set; }
public DbSet<Role> Roles { get; set; }
配置文件是父级,匹配的角色集合是子级我有几个类似的课程。
我想生成一个仅包含两个必需属性的选择列表
ProfileID, ProfileDescription
在查询中
SelectList(dbContext.Profiles.OrderBy(x => x.DisplayOrder).ToList(), "ProfileID", "ProfileDescription");
这没有带回子角色的开销
我不知道如何以一般方式执行此操作(返回没有孩子的父母)
您可以使用以下方法获取仅包含两个属性的配置文件列表
var profiles = dbContext.Profiles
.Select(x => new {
ProfileID = x.ProfileID,
ProfileDescription = x.ProfileDescription
}).OrderBy(x => x.DisplayOrder).ToList();
SelectList profilelist = new SelectList(profiles, "ProfileID", "ProfileDescription");
由于您将导航属性标记为 virtual
,因此实体框架只会在您访问相关项时提取它们。如果不这样做,实体框架将不会或至少不应该访问它们。注意:在调试中将实体添加到监视列表将导致 EF 获取相关项。
如果在使用 ToList()
具体化查询之前添加Include(profile => profile.Roles)
,它将加载相关项目。
有关加载相关项目的详细信息,请查看 MSDN 上的这篇文章。