LINQ to Entities 域服务
我有一个域服务,源自 LinqToEntitiesDomainService
它有一个方法,IQueryable
在 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 项模板被破坏,我会尝试使用 DataGrid 来代替。同样的交易。
数据在数据应该在的地方吗?如果没有,在哪里?当您想要为控件提供项目源时,ItemsSource 是正确使用的属性吗?
是否有任何已知的方法可以了解服务和客户端之间发生的情况?
更新
查询方法成功完成后,服务返回 504(“ReadResponse() 失败:服务器未返回此请求的响应。”)。
UPDATE
发生 504 是因为记录数超过 65,535 条。只有 24,000 多个通过了 LINQ 中的 where 子句(如果没有 where 子句,则为 74,000),因此这甚至不是对可以通过网络的内容的限制。荒诞。这个数字是微观的。
我认为我们了解到实体框架尚未准备好在软件中使用。
更新
...或者当您必须在 XAML 中显示大量记录时,您应该使用分页器。
I have a domain service, derived from LinqToEntitiesDomainService<FOOEntities>
It has one method, IQueryable<Bar> GetBar(). GetBar returns a LINQ query on the entity model. The LINQ works fine in LINQPad.
In the XAML of a Silverlight thingy, I have a ListBox whose ItemsSource points to a DomainDataSource defined in the same XAML file, named dsGetBar. AutoLoad="True" on dsGetBar. I have an empty handler for the dsGetBar's LoadedData event.
I run this in VS2010. When I attach to both the WebDev.WebServer process and the browser instance, and load the page, I hit breakpoints in GetBar() and in the LoadedData handler. From this I optimistically infer that the service is getting called by the client.
In GetBar(), I call queryresults.Count, which returns 24,000 and change. My method returns fine, without throwing any exceptions.
So here's the problem:
In LoadedData, dsGetBar.Data.Count == 0. No items ever appear in the ListBox. In case my ListBox item template was broken, I tried it with a DataGrid instead. Same deal.
Is Data where the data should be? If not, where? Is ItemsSource the correct property to use when you want to provide a control with a source of items?
Is there any known way to find out what is going on between the service and the client?
UPDATE
The service returns a 504 ("ReadResponse() failed: The server did not return a response for this request.") after the query method successfully completes.
UPDATE
The 504 happened because the number of records exceeded 65,535. Only 24,000-odd made it past a where clause in the LINQ (it would be 74,000 without the where clause), so this isn't even a limitation on what can go through the wire. Absurd. That number is microscopic.
I think what we've learned is that the Entity Framework isn't ready for use in software just yet.
UPDATE
...or that you should use pagers when you have to display large numbers of records in XAML.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 Fiddler 来查看客户端和服务器之间发生的情况。它是一个浏览器代理,可以拦截所有浏览器流量,以便您可以看到正在发生的情况。
不幸的是,我不知道出了什么问题。
You can use Fiddler to see what's going on between client and server. It's a browser proxy that intercepts all browser traffic so that you can see what's happening.
I don't know what goes wrong, unfortunately.