3

我有两节课:

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");

没有带回子角色的开销

我不知道如何以一般方式执行此操作(返回没有孩子的父母)

4

2 回答 2

3

您可以使用仅包含两个属性的配置文件列表

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");
于 2013-10-02T10:56:42.547 回答
1

由于您将导航属性标记为virtual,实体框架只会在您访问它们时获取相关项目。如果您不这样做,实体框架将不会或至少不应该访问它们。注意:在调试中将实体添加到监视列表将导致 EF 获取相关项目。

Include(profile => profile.Roles)如果您在使用 实现查询之前添加,它将加载相关项目ToList()

查看MSDN 上的这篇文章,了解有关加载相关项目的更多信息。

于 2013-10-02T10:39:00.610 回答