2011-10-22 4 views
0

J'utilise Entity Framework 4.1 (premier code) comme cadre de mise en correspondance O/R:Entity Framework Loading

J'ai trois entités: Post, PostForUser et l'utilisateur, alors qu'un PostForUser est associé à un seul poste et un utilisateur .

Maintenant, je veux aller chercher tous les messages pour un utilisateur et une charge en plus l'utilisateur qui a créé le poste:

var posts = _dbContext.PostsForUser 
    .Include("Post.ByUser") 
    .Where(x => x.WasRead == false && x.User.Id == CurrentUser.Id) 
    .Select(x => x.Post) 
    .ToArray(); 

Utilisation de la requête ci-dessus, la propriété « ByUser » est jamais chargé. Je n'utilise pas du tout de chargement paresseux, mais je n'arrive toujours pas à faire fonctionner le chargement correctement.

Aucune configuration de mappage personnalisée ou convention spéciale n'est enregistrée. Juste les définitions des entités suivantes:

public class Post 
{ 
    public int Id { get; set; }   
    public string Content { get; set; } 
    public DateTime Date { get; set; } 
    public User ByUser { get; set; } 
} 

public class PostForUser 
{ 
    public int Id { get; set; } 
    public User User { get; set; } 
    public Post Post { get; set; } 
    public bool WasRead { get; set; } 
} 

Répondre

0

Votre comprennent .Include("Post.ByUser") applique à PostForUser mais votre choisissent Post si l'include devrait aller à et de la sélection:

var posts = _dbContext.PostsForUser 
      .Where(x => x.WasRead == false && x.User.Id == CurrentUser.Id) 
      .Select(x => x.Post).Include("ByUser") 
      .ToArray(); 
+0

Merci, qui a résolu mon problème. Savez-vous quelles propriétés de navigation sont chargées automatiquement sans avoir besoin d'utiliser la clause "Include"? – ollifant