我的医生图看起来像这样:
我用来从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对象存储??
由于
答案 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”。