包括派生模型相关类

时间:2013-01-24 05:10:45

标签: c# linq entity-framework lambda

这是我用来尝试包含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();

include语句给出了这个错误

  

Include路径表达式必须引用定义的导航属性       类型。使用虚线路径作为参考导航属性和选择       收集器导航属性的运算符。

有问题的模型

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; }
}

如何为User类型的ProjectDoc添加Cover表?

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

public class Cover : ProjectDoc
{
    public string CoverURL { get; set; }
    public int UserID { get; set; }
    public virtual User User { get; set; }
}

1 个答案:

答案 0 :(得分:2)

目前是not supported。派生类型的急切加载关系不起作用。你可以做的最好的事情是执行单独的查询来加载第一个查询已经加载的所有必需用户,并让EF做它的魔法(它应该填充你已经加载的实体的导航属性,但你必须关闭延迟加载)。