Breeze:复杂图表只返回1个集合

时间:2013-02-21 17:21:27

标签: nosql breeze

我的医生图看起来像这样:

Physician Graph

我用来从WebApi后端获取数据的查询如下所示:

      var query = new breeze.EntityQuery().from("Physicians")
    .expand("ContactInfo")
    .expand("ContactInfo.Phones")
    .expand("ContactInfo.Addresses")
    .expand("PhysicianNotes")
    .expand("PhysicianSpecialties")
    .where("ContactInfo.LastName", "startsWith", lastInitial).take(5);

(注意ContactInfo是People对象的假名)

我发现如果我要求Contact.Phones扩展,我将只获得电话,而不是笔记或专业。如果我评论出手机,我将获得Contact.Addresses,而不是其他收藏品。如果我将ContactInfo与电话和地址一起注释掉,我只会获得Notes等等。基本上,似乎我一次只能获得一个集合。

所以,这是一个内置的“不要让程序员在脚下射击自己”。保护还是我必须启用某些东西?

OR这个图太复杂了?我应该考虑一个NoSql对象存储??

由于

2 个答案:

答案 0 :(得分:1)

您需要将所有展开式子句放在一个这样的:

var query = new breeze.EntityQuery().from("Physicians")
    .expand("ContactInfo, ContactInfo.Phones, ContactInfo.Addresses, PhysicianNotes, PhysicianSpecialties")
    .where("ContactInfo.LastName", "startsWith", lastInitial).take(5);

您可以在此处查看文档:{​​{3}}

答案 1 :(得分:1)

JY告诉你 HOW 。但 BEWARE 的性能影响......无论是在数据层还是在线上。你可以立刻抓住过于广泛而深刻的死亡而死于悲惨的死亡。

我在他的样本中看到了take(5)。这对于限制失控请求至关重要(你必须在服务器上做的事情)。通常,我会为拉动单个根实体的查询保留此类扩展图提取。如果我要提供一个选择列表,并且我需要来自实体图的不同部分的数据,我会使用投影来获得我需要显示的内容(当然,假设没有SQL View可用于这个目的)。

如果任何相关项目是参考列表(颜色,状态,状态......),请考虑在准备步骤中将它们分别放入缓存中。不要将它们包含在expand中; Breeze会自动将客户端上的它们连接到您查询的实体。

最后,作为语法问题,您不必重复段的名称。当您编写“ContactInfo.Phones”时,您同时获得ContactInfos和Phones,因此您无需单独指定“ContactInfo”。