我有一个域服务,源自 LinqToEntitiesDomainService<FOOEntities>
它有一个方法,IQueryable<Bar> GetBar()。GetBar 在实体模型上返回一个 LINQ 查询。LINQ 在 LINQPad 中运行良好。
在 Silverlight 事物的 XAML 中,我有一个 ListBox,其 ItemsSource 指向在同一个 XAML 文件中定义的 DomainDataSource,名为 dsGetBar。dsGetBar 上的 AutoLoad="True"。对于 dsGetBar 的 LoadedData 事件,我有一个空处理程序。
我在 VS2010 中运行它。当我附加到 WebDev.WebServer 进程和浏览器实例并加载页面时,我在 GetBar() 和 LoadedData 处理程序中遇到断点。由此我乐观地推断该服务正在被客户端调用。
在 GetBar() 中,我调用 queryresults.Count,它返回 24,000 并进行更改。我的方法返回正常,没有抛出任何异常。
所以问题来了:
在 LoadedData 中,dsGetBar.Data.Count == 0。ListBox 中从未出现任何项目。如果我的 ListBox 项目模板被破坏,我尝试使用 DataGrid 代替。同样的交易。
数据应该在哪里?如果没有,在哪里?当您想为控件提供项目源时,ItemsSource 是正确的属性吗?
是否有任何已知的方法来找出服务和客户端之间发生了什么?
更新
查询方法成功完成后,服务返回 504(“ReadResponse() failed: The server did not return a response for this request.”)。
更新
发生 504 是因为记录数超过 65,535。只有 24,000 多个通过了 LINQ 中的 where 子句(如果没有 where 子句,它将是 74,000 个),因此这甚至不是对可以通过线路的限制。荒诞。这个数字是微观的。
我认为我们了解到的是,实体框架还没有准备好在软件中使用。
更新
...或者当您必须在 XAML 中显示大量记录时,您应该使用分页器。