gpt4 book ai didi

javascript - Breeze - 获取实体数组的所有导航属性

转载 作者:行者123 更新时间:2023-11-30 10:08:40 25 4
gpt4 key购买 nike

我正在尝试通过 Breeze 弄清楚如何通过单个请求为实体数组中的所有项目扩展特定的导航属性。

关于 this page在 Breeze 文档中,它显示了实现此目的的以下方法:

var orderEntityType = selectedOrders[0].entityType;
var navProp = orderEntityType.getNavigationProperty("OrderDetails");
var navQuery = EntityQuery
.fromEntityNavigation(selectedOrders, navProp)
.expand("Product");
manager.executeQuery(navQuery).fail(handleFail);

但是,当我尝试这个时,我得到了错误

The 'entity' parameter must be an entity

所以 I looked up in the documentation专门针对 EntityQuery.fromEntityNavigation 方法,它显示:

// 'employee' is a previously queried employee
var ordersNavProp = employee.entityType.getProperty("Orders");
var query = EntityQuery.fromEntityNavigation(employee, ordersNavProp);

文档表明它是针对特定实体的,而不是多个实体。这与我遇到的错误一致。

是否有可能在单个请求中获取所有导航属性,或者是遍历数组以对每个实体发出请求的首选方式?

基本上,我致力于过滤项目列表。我的目标是,当用户选择一个过滤器时,它会在那时展开所需的导航属性,而不是预先加载所有数据。

感谢您的帮助。

最佳答案

我认为这可能是 navigation properties documentation page 上的拼写错误或一些过时的信息.根据API documentation对于 EntityQuery.fromEntityNavigation,第一个参数应该是单个实体,而不是数组。查看 Breeze 代码,没有看到任何可以传递实体数组的证据。

作为变通方法,您可以稍微不同地构造查询。继续 Order/OrderDetails 场景,您可以执行如下操作:

var subsetOfOrders = ..., // array containing the subset of orders whose OrderDetails we need to load
predicates = subsetOfOrders.map(function(order) { return new breeze.Predicate('OrderId', '==', order.OrderId()); }),
predicate = breeze.Predicate.or(predicates),
query = new breeze.EntityQuery('Orders').expand('OrderDetails').where(predicate);

manager.executeQuery(query)...

如果您能够直接查询订单详细信息,您甚至不需要展开。 Breeze 会将新加载的 OrderDetails 连接到已缓存在实体管理器中的相应订单实体:

var subsetOfOrders = ..., // array containing the subset of orders whose OrderDetails we need to load
predicates = subsetOfOrders.map(function(order) { return new breeze.Predicate('OrderId', '==', order.OrderId()); }),
predicate = breeze.Predicate.or(predicates),
query = new breeze.EntityQuery('OrderDetails').where(predicate);

manager.executeQuery(query)...

这种基于谓词的解决方法可能可行也可能不可行,具体取决于您处理的订单数量。最终可能会得到一个很长的查询字符串。然后,您可以考虑使用专用 Controller 操作(即“OrderDetailsByOrderId(int[] orderIds)”并使用 withParameters EntityQuery 方法使用新操作加载订单详细信息。

关于javascript - Breeze - 获取实体数组的所有导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com