8
votes

Iquéryable est disposé après avoir utilisé

J'ai un peu de code qui ressemble à ceci:

public static IEnumerable<User> SelectFromEmployee(int employee)
{
    using (var ctx = Database.AccountingContext())
    {
        return ctx.Users.Where(c => c.Employee_FK == employee).ToList();
    }
}


1 commentaires

Dans la deuxième extrait de code que vous utilisez tolist () qui créera une nouvelle liste à partir de ce CTX et donc aucun problème si vous Disposez le < Code> CTX Après cela, mais dans votre première tentative, vous disposez du CTX et utilisez sa valeur en dehors du à l'aide de portée.


4 Réponses :


4
votes

Le problème est que vous créez votre contexte de données, puis je dispose-le:

à l'aide de (var ctx = base de données.accountingContext ())

juste pour obtenir votre aller, essayez cela à la place: xxx

Qu'est-ce que j'ai fait ici est que j'ai déplacé le contexte de données en dehors de la méthode à la place, le problème est maintenant que vous devez contrôler le dispositif d'élimination de par vous-même et vous devrez peut-être aussi considérer que vous bloquez pour plus de connexions, assurez-vous donc de disposer de la connexion.

EDIT

J'ai supposé que vous vouliez pouvoir utiliser également des relations, etc.


0 commentaires

1
votes

Le problème est que vous disposez du DataContext. Une option est de le garder pendant que vous utilisez le résultat de la requête.


0 commentaires

1
votes

Si vous voulez littéralement faire ce que vous demandez

public static IQueryable<User> SelectFromEmployee(int employee)
{
    using (var ctx = Database.AccountingContext())
    {
        return ctx.Users.Where(c => c.Employee_FK == employee).ToList().AsQueryable();
    }
}


0 commentaires

6
votes

Vous devez choisir:

  1. Ne pas disposer du contexte (sans l'utilisation de l'instruction) et d'obtenir iquéryable , qui est invoqué sur la base de données.
  2. disposer le contexte et obtenir iquéryable via toliste (). Asqueriserable () , qui est invoqué à la mémoire.

    Veuillez noter que le point important est l'endroit où les données sont via le chargement différé.


0 commentaires