, en este ejemplo here, Scott muestra haciendo una consulta Linq contra el dbContext y vinculando el resultado directamente a un GridView para mostrar una lista de productos. Su ejemplo es usar la versión CTP4 de Code First.Enlace de datos de formularios Web con error de consulta de Código EF Primero-Linq
Sin embargo, cuando intento hacer lo mismo utilizando la última versión de ADO.NET Entity Framework 4.1, me sale el siguiente error:
Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data.
veo que el objeto DBQuery está lanzando este error a propósito en su implementación de IListSource.GetList(), que se utiliza en enlace de datos.
¿Alguna idea de por qué funciona su ejemplo? Por cierto, sé que puedo hacer que esto funcione poniendo un projects.ToList()
. Mi pregunta principal es si algo cambió en la versión de lanzamiento que hace que este tipo de cosas ya no funcione, o si me falta algo en alguna parte que puede evitar este error.
Sólo como referencia, me refiero al código como este:
MyDbContext db = new MyDbContext();
var projects = from p in db.Projects
where p.AnotherField == 2
select p;
grdTest.DataSource = projects;
grdTest.DataBind();
No sé si algo ha cambiado, pero usted debe llamar 'ToList' de todos modos porque el contexto es desechable y desea deshacerse de él una vez que no lo necesita. Muchas veces esto sucede antes de que la página sea renderizada (y la consulta ejecutada => excepción). 'ToList' se asegurará de que su consulta se ejecute cuando existe el contexto. –
Si bien lo que usted dijo es un buen consejo general, esta pregunta específica es sobre el error anterior y cómo los ejemplos de Scott estaban funcionando. El error que tengo no está relacionado con un contexto faltante b/c que se está lanzando cuando se llama a la llamada a IListSource.GetList() en el objeto DBQuery durante el enlace de datos. – patmortech
Sí, no es la respuesta a su pregunta. Es por eso que lo publiqué como un comentario. –