【发布时间】:2014-02-24 18:02:28
【问题描述】:
试图轻装上阵,但遇到了最糟糕的错误,根本没有。我正在制作的元数据似乎没有被微风接受。我知道目前元数据存在一些问题,例如“foreignKeyNamesOnServer”中的值不正确以及其他一些问题。我正在制作的元数据可以在这里查看(太大): http://pastebin.com/ycP4jXxn
var serviceName = 'http://www.dockyard.com:8080/rest';
var entityManager = new breeze.EntityManager({serviceName: serviceName});
var entityQuery = new breeze.EntityQuery();
var query = breeze.EntityQuery.from("application")
entityManager.executeQuery(query)
.then(function (data) {
console.log(data);
}, function (error) {
console.log(error);
});
所以我看到的行为是没有与元数据解析相关的 javascript 错误,元数据返回 200 OK。对 /rest/application 的命中返回 200 OK 并包含以下数据。
[{"@id":1,"id":1,"name":"dsad","deploymentStrategies":null,"versions":null,"groups":null},{"@id":2,"id":2,"name":"sss","deploymentStrategies":null,"versions":null,"groups":null},{"@id":3,"id":3,"name":"fdsfs","deploymentStrategies":null,"versions":null,"groups":null},{"@id":4,"id":4,"name":"fdsa","deploymentStrategies":null,"versions":null,"groups":null},{"@id":5,"id":5,"name":"dasda","deploymentStrategies":null,"versions":null,"groups":null}]
Promise 正在调用错误回调:在填充 metadataStore 之前无法执行 _executeQueryCore
元数据存储的内容:
{"namingConvention":{"name":"camelCase"},"localQueryComparisonOptions":{"name":"caseInsensitiveSQL","isCaseSensitive":false,"usesSql92CompliantStringComparison":true},"dataServices":[{"serviceName":"http://www.dockyard.com:8080/rest/","hasServerMetadata":true,"jsonResultsAdapter":"webApi_default","useJsonp":false}],"_resourceEntityTypeMap":{"platform":"Platform:#com.psidox.dockyard.controller.model.dockyard","application":"Application:#com.psidox.dockyard.controller.model.application","host":"Host:#com.psidox.dockyard.controller.model.host","groupdeploymentstrategy":"GroupDeploymentStrategy:#com.psidox.dockyard.controller.model.application","dockyard":"Dockyard:#com.psidox.dockyard.controller.model.dockyard","configurationentry":"ConfigurationEntry:#com.psidox.dockyard.controller.model","hoststrategy":"HostStrategy:#com.psidox.dockyard.controller.model.application","dockerimage":"DockerImage:#com.psidox.dockyard.controller.model.docker","version":"Version:#com.psidox.dockyard.controller.model.application","docker":"Docker:#com.psidox.dockyard.controller.model.docker","hostproviderconfig":"HostProviderConfig:#com.psidox.dockyard.controller.model.host","hostprovider":"HostProvider:#com.psidox.dockyard.controller.model.host","metadataimpl":"MetadataImpl:#com.psidox.dockyard.controller.model","deployment":"Deployment:#com.psidox.dockyard.controller.model.dockyard","hosttype":"HostType:#com.psidox.dockyard.controller.model.host","group":"Group:#com.psidox.dockyard.controller.model.application","groupimplementation":"GroupImplementation:#com.psidox.dockyard.controller.model.application","deploymentstrategy":"DeploymentStrategy:#com.psidox.dockyard.controller.model.dockyard","groupdeployment":"GroupDeployment:#com.psidox.dockyard.controller.model.application","metadata":"Metadata:#com.psidox.dockyard.controller.model"},"_structuralTypeMap":{},"_shortNameMap":{},"_ctorRegistry":{},"_incompleteTypeMap":{},"_incompleteComplexTypeMap":{},"_id":0,"_deferredTypes":{}}"
我很确定此错误与未从我的元数据正确填充元数据存储有关。只是想知道为什么 Breeze 在遇到无效元数据时没有抛出任何类型的错误?
编辑:
在调试解析元数据调用后,Breeze Metadata Schema Documentation 似乎已过期。快速浏览一下,它看起来已经发生了变化:
- 键名“structuralTypeMap”已更改为“structuralTypes”。
- “structuralTypeMap”曾经是一个对象,键为 EntityTypeName,值为实体定义。现在看来,“structuralTypes”是一个包含实体定义的数组。
如果元数据不包含任何结构类型,是否也应该抛出异常?目前它正在静默失败,这对调试没有太大帮助。
【问题讨论】:
-
不确定发生了什么,但尝试直接调用 MetadataStore.fetchMetadata 看看是否可以处理那里的错误。