0

In our project we are performing a projection query on the server. The resource name of the projection query has the same name as an EntityType. When we receive the results Breeze is trying to stuff our results into the EntityType. After stepping through the code I believe this happens in the visitAndMerge function.

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

The _getToEntityType eventually calls _getFromEntityType which is matching our resource with our EntityType. Not quite sure if this is a bug or more of a Breeze rule, but we thought we would bring it up because we had a case where we didn't want to match the resource name to the EntityType.

4

1 回答 1

0

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

您也可以直接更新此地图,请参阅 Api Docs - setEntityTypeForResourceName。单个 entityType 可以具有与其关联的任意数量的资源名称

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

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

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

如果上一步没有解析 entityType 并且查询不是投影,即使用 select 语句,那么上面提到的地图是根据查询中指定的初始资源名称进行咨询的。

希望这可以帮助。

于 2013-06-14T19:17:41.163 回答