包括派生模型相关类

Jed*_*ant 7 c# linq lambda entity-framework

这是我用来尝试包含User表的Lambda表达式,它会抛出错误.

ICollection<Activity> activity = db.Activities
            .Include(i => i.Project.ProjectDoc.OfType<Cover>().Select(v => v.User))
            .Where(u => u.UserID == WebSecurity.CurrentUserId)
            .OrderByDescending(d => d.DateCreated).ToList();
Run Code Online (Sandbox Code Playgroud)

include语句给出了这个错误

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

有问题的模型

public abstract class ProjectDoc
{
    public int ProjectDocID { get; set; }
    public int ProjectID { get; set; }
    public string DocTitle { get; set; }
    public string Status { get; set; }
    public string Access { get; set; }
    public DateTime DateCreated { get; set; }


    public virtual ProjectDocAccess ProjectDocAccess { get; set; }
    public virtual Project Project { get; set; } 
    public virtual ICollection<Comment> Comment { get; set; }
    public ICollection<ProjectDocVote> ProjectDocVote { get; set; }
}
public class Segment : ProjectDoc
{
    public string Content { get; set; }
}
public class Cover : ProjectDoc
{
    public string CoverURL { get; set; }
    public int UserID { get; set; }
    public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何包含类型的User表?ProjectDocCover

更新:根据答案.我更新了模型,Cover看起来像这样,并删除了我说导致错误的包含.我现在可以得到数据:

public class Cover : ProjectDoc
{
    public string CoverURL { get; set; }
    public int UserID { get; set; }
    public virtual User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Lad*_*nka 2

目前不支持。派生类型上的预加载关系不起作用。您能做的最好的事情就是执行单独的查询来加载第一个查询已加载的 Covers 所需的所有用户,并让 EF 发挥其魔力(它应该在已加载的实体上填充您的导航属性,但您必须关闭延迟加载)。