7

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 ステートメントでこのエラーが発生します

インクルード パス式は、型で定義されたナビゲーション プロパティを参照する必要があります。参照ナビゲーション プロパティにはドット パスを使用し、コレクション ナビゲーション プロパティには 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; }
}

of タイプのUserテーブルを含めるにはどうすればよいですか?ProjectDocCover

更新:答えごと。のモデルCoverを次のように更新し、エラーの原因であると言ったインクルードを削除しました。データを取得できるようになりました:

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

1 に答える 1

2

現在サポートされていません。派生型でリレーションを積極的に読み込むとうまくいきません。最善の方法は、別のクエリを実行して、最初のクエリで既に読み込まれている Covers に必要なすべてのユーザーを読み込み、EF にその魔法を実行させることです (既に読み込まれているエンティティのナビゲーション プロパティを埋める必要がありますが、遅延読み込みをオフにする必要があります)。

于 2013-01-24T12:14:34.603 に答える