Webforms la liaison de données avec EF Code-Première requête Linq erreur

Dans cet exemple ici, Scott montre faire une requête Linq contre la dbContext et de liaison le résultat directement dans un GridView pour afficher une liste de produits. Son exemple est à l'aide de la CTP4 version du Code, Première des choses.

Cependant, lorsque j'essaie de faire la même chose à l'aide de la dernière version de EntityFramework 4.1, j'obtiens l'erreur suivante:

Liaison de données directement à un magasin de requête (DbSet, DbQuery, DbSqlQuery) est
pas pris en charge. Au lieu de remplir un DbSet avec des données, par exemple par
l'appel de Charge sur le DbSet, puis de les lier à des données locales.

Je vois que le DBQuery objet est de lancer cette erreur sur le but de sa mise en œuvre de IListSource.GetList(), qui est utilisé dans la liaison de données.

Des idées pourquoi son exemple fonctionne? Par la manière, je sais que je peux faire ce travail par la mise en projects.ToList(). Ma principale question est de savoir si quelque chose a changé dans la version qui fait ce genre de chose ne fonctionne plus, ou si je suis absent quelque chose quelque part qui peut contourner cette erreur.

Juste pour la référence, je fais référence à un code comme ceci:

MyDbContext db = new MyDbContext();

var projects = from p in db.Projects
               where p.AnotherField == 2
               select p;

grdTest.DataSource = projects;
grdTest.DataBind();
  • Je ne sais pas si quelque chose a changé, mais vous devriez appeler ToList de toute façon parce que le contexte est disponible et vous souhaitez vous débarrasser, une fois que vous n'en avez pas besoin. Plusieurs fois, ce qui se passe avant que la page est affichée (et exécution de requête => exception). ToList fera en sorte que votre requête est exécutée lorsque le contexte existe.
  • Tout ce que vous avez dit est une bonne recommandation générale, cette question est au sujet de l'erreur ci-dessus et Scott exemples de travail. L'erreur que j'ai n'est pas liée à un contexte manquant b/c il est en train d'être levée lors de l'appel à IListSource.GetList() est appelée sur le DBQuery objet lors de la liaison de données.
  • Oui ce n'est pas la réponse à votre question. C'est pourquoi je l'ai posté un commentaire.
InformationsquelleAutor patmortech | 2011-07-13