我将会说到,WCF RIA服务总是返回一个强类型,即IEnumerable IQueryable。现在我们的场景是它们是客户端的六个窗格,每个窗格都包含一个数据网格,所有这些数据网格都包含三个层次结构,即
Product
|
|-Orders
|
|- and so on
问题是我们在数据库中有一个特定的表,其架构和细节如下
表名称PanesInfo
ID PaneName TableName TableColomn Level Type
1 PaneOne Products ProductID 1
2 PaneOne Products ProductName 1
3 PaneOne Orders OrderID 2
4 PaneOne Orders OrderName 2
5 PaneONE Orders ORderRef 2
他们将定义级别2,此表将包含所有窗格的信息,现在用户必须首先查询此表,以获取有关在第一级LEVE 2的窗格一的数据网格中必须显示的内容的信息。三级如此等等(父母子女关系)这些级别之间的联系也将在这里提到我不知道如何与客户讨论现在我们已经尝试了很多解决方案(例如xml解析)请提出一个解决方案,由于该数据库非常繁重,因此服务器端的迭代次数较少。
答案 0 :(得分:0)
IMO你在数据方面考虑得太多,而不是客户要求的中间因素。您还必须开始考虑异步方法,这意味着屏幕更新时会发生一些事情。在您的屏幕对客户有利之前,必须填写第一个产品网格。选择产品意味着您必须在链中填写订单等。
您的第一个查询应该是仅检索产品。当产品到达客户端时,抓住第一个产品,并向DB发出请求以获取有关该产品的更多信息。然后提升UI的属性以刷新UI。当产品网格刷新时,数据库请求将关闭以收集有关该产品的更多信息(例如订单)。当它(订单)到达时,它将填充其他网格。对于用户来说,更有可能的是,它会让所有数据同时到达(绑定产品网格需要时间......)
每次客户点击另一个产品时,您都必须返回数据库才能获取该数据。请记住,如果客户端点击以前单击的产品,那么该产品数据已经在客户端,并且您不必进行数据库访问。您如何决定是否转到数据库是您必须实现的逻辑。
如果您多次请求数据,RIA会通过将刚收到的数据合并到客户端模型中来处理此问题。默认模式不会覆盖客户端已更改的数据。如果数据已经在客户端退出,它也将忽略数据 - 这意味着您无需进行数据库操作。
请记住,这不是客户端服务器。您正在将数据从服务器传输到客户端。有一个客户端模型,以及服务器端的客户端 - 服务器模型(这是EF部分)。 RIA服务不仅管理数据的传输,还为您提供与位于服务器端的模型相同的客户端模型。
HTH, 理查德
答案 1 :(得分:0)
我相信这个问题有点过于模糊,而且不可能只用这些信息来定义解决方案。
但是,看看IncludeAttribute,它允许减少客户端往返,允许您序列化对象图。
当然,这意味着你携带了很多数据客户端。但这是另一个话题