2013-01-24 14 views
7

ここには、エラーをスローするUserテーブルを含めるのに使用しているラムダ式があります。派生モデルを含む関連クラス

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ステートメントのは、このエラー

インクルードパス式が タイプに定義されたナビゲーションプロパティを参照する必要がありますになります。参照ナビゲーションプロパティには点線のパスを使用し、コレクションナビゲーションプロパティには オペレータを選択します。

質問

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

でモデルどのように私はタイプCoverProjectDocためUserテーブルが含まれていますか?

更新: 回答ごとに。 Coverのモデルを次のように更新し、エラーの原因となっていたインクルードを削除しました。私は今データを得ることができます:

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

答えて

2

これは現在not supportedです。派生型に関する積極的なロード関係は機能しません。あなたができる最善のことは、最初のクエリで既に読み込まれたCoversのために必要なすべてのユーザーをロードするために別のクエリを実行し、EFにその魔法をさせることです(既にロードされたエンティティのナビゲーションプロパティを満たすはずですが、遅延ロードをオフにする必要があります)。

関連する問題