对与EntityType同名的资源进行投影查询

时间:2013-06-14 14:12:38

标签: javascript breeze

在我们的项目中,我们正在服务器上执行投影查询。投影查询的资源名称与EntityType具有相同的名称。当我们收到结果时,Breeze试图将我们的结果填充到EntityType中。单步执行代码后,我相信这会发生在visitAndMerge函数中。

if (mappingContext.query && nodeContext.nodeType === "root" && !meta.entityType) {
        meta.entityType = mappingContext.query._getToEntityType &&
        mappingContext.query._getToEntityType(mappingContext.entityManager.metadataStore);
}

_getToEntityType最终调用_getFromEntityType,它将我们的资源与我们的EntityType匹配。不太确定这是否是一个错误或更多的Breeze规则,但我们认为我们会提出它,因为我们有一个案例,我们不希望将资源名称与EntityType匹配。

1 个答案:

答案 0 :(得分:0)

在执行查询之前,Breeze使用资源名称/实体类型名称映射来解析类型信息。使用Entity Framework后端时,使用EntitySet名称作为资源名称自动更新此映射。此类型信息用于验证和构造查询URL。

您也可以直接更新此地图See Api Docs - setEntityTypeForResourceName。单个entityType可以包含与之关联的任意数量的资源名称

从服务器返回数据后,Breeze会尝试按照以下顺序提取entityType信息:(我们需要更好地记录这一点)。

首先,它检查返回的json有效负载,并使用 JsonResultsAdapter 来确定返回的任何实体的类型。在检索多个类型的实体的图形或涉及继承的子类型的查询时,这很重要。您可以插入自己的 JsonResultsAdapter 以进行任何查询。

如果在前一步骤中没有解析任何实体类型,则Breeze将使用在任何 EntityQuery.toType 方法调用中指定的任何entityType。

如果上一步未解析entityType且查询不是投影,即使用select语句,则上述地图将根据查询中指定的初始资源名称进行咨询。

希望这有帮助。