Javascript 对与EntityType同名的资源的投影查询
在我们的项目中,我们正在服务器上执行投影查询。投影查询的资源名称与EntityType具有相同的名称。当我们收到结果时,Breeze试图将结果填充到EntityType中。在逐步浏览代码之后,我相信这会在Javascript 对与EntityType同名的资源的投影查询,javascript,breeze,Javascript,Breeze,在我们的项目中,我们正在服务器上执行投影查询。投影查询的资源名称与EntityType具有相同的名称。当我们收到结果时,Breeze试图将结果填充到EntityType中。在逐步浏览代码之后,我相信这会在visitAndMerge函数中发生 if (mappingContext.query && nodeContext.nodeType === "root" && !meta.entityType) { meta.entityType = mapp
visitAndMerge
函数中发生
if (mappingContext.query && nodeContext.nodeType === "root" && !meta.entityType) {
meta.entityType = mappingContext.query._getToEntityType &&
mappingContext.query._getToEntityType(mappingContext.entityManager.metadataStore);
}
\u getToEntityType
最终调用了\u getFromEntityType
,它将我们的资源与我们的EntityType相匹配。不太确定这是一个bug还是更多的Breeze规则,但我们认为我们会提出它,因为我们不想将资源名称与EntityType匹配。在执行查询之前,Breeze使用资源名称/实体类型名称映射来解析类型信息。在使用实体框架后端时,使用EntitySet名称作为资源名称自动更新此映射。此类型信息用于验证和构造查询url
您也可以直接更新此地图。单个entityType可以有任意数量的资源名称与其关联
从服务器返回数据后,Breeze将尝试按照以下顺序提取entityType信息:(我们确实需要更好地记录这一点)
首先,它检查返回的json负载,并使用JsonResultsAdapter确定返回的任何实体的类型。当检索多个类型的实体的图或查询涉及继承的子类型时,这一点很重要。您可以为任何查询插入自己的JsonResultsAdapter
如果在上一步中未解析任何实体类型,则Breeze将使用任何EntityQuery.toType方法调用中指定的entityType
如果上一步没有解析entityType,并且查询不是投影,即使用select语句,那么上面提到的映射将基于查询中指定的初始资源名称进行查询
希望这有帮助