2009-07-03 6 views
0

Je suis confronté au problème suivant: dans le contrôleur Je sélectionne les données dont j'ai besoin et les stocke dans la ViewData;ASP.NET MVC et Entity Framework: persistance de requête

using (Models.SkedruleEntities ctx = new Models.SkedruleEntities()) 
{ 
    ViewData["users"] = (from u in ctx.User select u); 
} 

Dans la vue j'essaie de lire de la ViewData comme ceci:

<p> 
    <%foreach(User user in (IEnumerable<User>)ViewData["users"]) { %> 
     <div><%=user.Name %></div> 
    <%}%> 
</p> 

Mais je reçois un système. ObjectDisposedException erreur, car ViewData semble contenir la requête, pas les données récupérées par la requête et bien sûr le contexte ctx n'est plus disponible.

Une aide? Merci

Répondre

2

Vous stockez la requête dans les données de vue, pas les résultats. Ainsi, dans la vue, vous récupérez la requête et l'exécutez. A ce moment le contexte est déjà disposé.

La solution consiste à exécuter la requête dans le contrôleur et stocker le résultat dans le ViewData:

ViewData["users"] = (from u in ctx.User select u).ToList(); 
2

Il suffit d'ajouter ToList():

ViewData["users"] = (from u in ctx.User select u).ToList(); 
Questions connexes