这个[MetadataStore.FetchMetadata]调用是在Breeze尝试对远程服务执行第一次查询之前自动进行的。
但是我打这样的电话:
function getBags() {
var bags;
var query = breeze.EntityQuery.from('Bags');
return manager.executeQuery(query).then(querySucceded, _queryFailed);
function querySucceded(data) {
bags = data.result;
logSuccess("Retrieved Bag Data")
return bags;
}
}
function _queryFailed(error) {
logError(config.appErrorPrefix + "Query Failed: " + error.message);
throw error;
}
当我这样做时,我收到此错误:
"无法找到'类型'名称:' Bag:#DataAccess'。请务必先执行查询或调用fetchMetadata。"
作为error.message
中_queryFailed
的值。
注意:我知道它正在连接到我的OData服务,因为如果我为查询添加了随机内容,我会找不到找到的资源:
未找到该细分受众群的资源' Bagsasdfas'。;
我正在使用HotTowel.Angular和HotTowel.Angular.Breeze nuget包。唯一的区别是我直接连接到WCF数据服务(OData)。
在调用查询之前,我确实有这些调用:
breeze.config.initializeAdapterInstances({ dataService: "OData" });
breeze.config.initializeAdapterInstance("modelLibrary", "backingStore", true);
任何人都知道为什么Breeze不会自动为此获取元数据?
答案 0 :(得分:1)
我找到了解决此问题的方法。 Breeze正在获取元数据。
但是Breeze有一个大多数未记录的OData要求,它不是OData规范的一部分:
在元数据中,Schema Namespace
(位于元数据顶部)和EntitySet
EntityType命名空间(位于EntityContainer
下)必须相同。
感谢Brian Noyes的Pluralsight课程,让我知道这一点。
注意:这适用于OData的WCF数据服务版本。对于Web API OData,您的里程可能会有所不同。
通过使包含我的Entity Framework模型的项目与模型(edmx)名称空间具有相同的名称和名称空间,我能够实现这一目标。
您可以通过右键单击设计器并选择属性(命名空间是其中一个属性)来设置edmx的命名空间。
一旦我将项目(及其中的所有文件)从名称“DataAccess”更改为我的edmx名称空间的名称,Breeze就开始正常工作了。
答案 1 :(得分:0)
我已经为Breeze提交了这个错误,它解决了这个问题:
$metadata handling: entity types in separate schema from container not supported #96
我不认为Breeze要求EntityType命名空间与Schema名称空间匹配是正确的 - 我认为这是一个错误。
修复是1行修复,您可以在此处找到: https://github.com/johncrim/breeze.js/commit/9caa76a0de903e08083f600a2a23b9203ef87b49
如果您愿意,可以使用https://github.com/johncrim/breeze.js,它只包含当前breeze.js主机上的补丁。但请注意,它已经落后于Breeze的4个提交:master。