Erreur: le résultat d'une requête ne peut pas être énuméré plus d'une fois.

domainservices entity-framework

Question

Appelez SP dans EF 4.0 dans le code suivant:

  public IQueryable<Employee> GetEmployeesByFollowup()
        {
            var results = from p in this.ObjectContext.SearchEmployeeFollowup()
                          select p;
            foreach (Employee p in results)
            {
                p.DepaermentReference.Load();                
            }
            return results.AsQueryable<Employee>();
        }

Erreur suivante provoquée dans la boucle For:

"Le résultat d'une requête ne peut pas être énuméré plus d'une fois."} System.SystemException {System.InvalidOperationException}

Il semble que cela fonctionne bien pour un certain temps. Ne comprend pas pourquoi.

Réponse populaire

Renvoyer un IQueryable partir d'une méthode n'est utile que si vous souhaitez ajouter quelque chose à la requête (filtre, projection, jointure ...) avant son exécution. Mais puisque votre méthode énumère les résultats avec foreach , la requête a déjà été exécutée lorsque vous la retournez. Il est donc trop tard pour y ajouter quoi que ce soit ...

Peut-être que votre méthode devrait renvoyer un IEnumerable<Employee> :

    public IEnumerable<Employee> GetEmployeesByFollowup()
    {
        var results = this.ObjectContext.SearchEmployeeFollowup().ToList();
        foreach (Employee p in results)
        {
            p.DepaermentReference.Load();
        }
        return results;
    }

BTW, EF 4.0 gère le chargement paresseux des entités associées, vous n'avez donc normalement pas à appeler explicitement Load



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow