【发布时间】:2011-10-04 05:11:58
【问题描述】:
在此示例here 中,Scott 展示了对 dbContext 执行 Linq 查询并将结果直接绑定到 GridView 以显示产品列表。他的例子是使用 Code First 的 CTP4 版本。
但是,当我尝试使用最新版本的 EntityFramework 4.1 做同样的事情时,我收到以下错误:
数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)是 不支持。而是用数据填充 DbSet,例如通过 在 DbSet 上调用 Load,然后绑定到本地数据。
我看到 DBQuery 对象在其 IListSource.GetList() 的实现中故意抛出此错误,用于数据绑定。
任何想法为什么他的例子有效?顺便说一句,我知道我可以通过输入projects.ToList() 来完成这项工作。我的主要问题是发布版本中是否发生了某些更改,导致此类事情不再起作用,或者我是否遗漏了可以解决此错误的地方。
仅供参考,我指的是这样的代码:
MyDbContext db = new MyDbContext();
var projects = from p in db.Projects
where p.AnotherField == 2
select p;
grdTest.DataSource = projects;
grdTest.DataBind();
【问题讨论】:
-
我不知道是否有任何变化,但无论如何您都应该致电
ToList,因为上下文是一次性的,您希望在不需要它时将其丢弃。很多时候,这发生在页面呈现之前(并且查询执行 => 异常)。ToList将确保在上下文存在时执行您的查询。 -
虽然您所说的是很好的一般建议,但这个具体问题是关于上述错误以及 Scott 的示例如何工作的。我遇到的错误与在数据绑定期间对 DBQuery 对象调用 IListSource.GetList() 时抛出的缺少上下文 b/c 无关。
-
是的,这不是您问题的答案。这就是我将其作为评论发布的原因。
标签: c# asp.net data-binding exception-handling entity-framework-4.1