2013-01-24 22 views
7

Ecco l'espressione Lambda che sto utilizzando per provare e includere la tabella User, che genera un errore.Includi modelli derivati ​​Classe correlata

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

l'istruzione include dà questo errore

L'espressione Includere percorso deve fare riferimento a una proprietà di navigazione definita sulla tipo. Utilizzare i percorsi tratteggiati per le proprietà di navigazione di riferimento e l'operatore Seleziona per le proprietà di navigazione della raccolta.

Il modello in questione

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

Come si include la tabella User per la ProjectDoc di tipo Cover?

UPDATE: Per la risposta. Ho aggiornato il modello per Cover in modo che assomigli a questo e ho rimosso l'inclusione che ho detto causa l'errore. Ora posso ottenere i dati:

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

risposta

2

Attualmente è not supported. Rapporti di caricamento avidi sui tipi derivati ​​non funzionano. Il meglio che puoi fare è eseguire query separate per caricare tutti gli utenti necessari per i Cover già caricati dalla prima query e lasciare che EF faccia la sua magia (dovrebbe riempire le tue proprietà di navigazione su entità già caricate ma devi avere il caricamento pigro disattivato).