我目前正在研究与这些技术相关的概念证明。
我基本上已经实现了本文中的建议,但首先使用EF代码除外。
Consuming an ASP.NET Web API OData Service with Breeze
例外,即
“未捕获的TypeError:无法读取未定义的属性'propertyRef'”
执行这段客户端代码时会抛出:
<script type="text/javascript">
var my = {}; //my namespace
$(function () {
debugger;
var serverAddress = "/odata/";
breeze.config.initializeAdapterInstances({ dataService: "OData" });
var manager = new breeze.EntityManager(serverAddress);
my.vm = {
entities: ko.observableArray([]),
load: function () {
var query = breeze.EntityQuery.from("Customers");
manager.executeQuery(query, function (data) {
var results = data.results;
$.each(data.results, function (i, c) {
my.vm.entities.push(c);
});
})
.fail(function (e) {
alert(e);
}); ;
}
}
my.vm.load();
ko.applyBindings(my.vm);
});
</script>
源于breeze.debug.js中的这个
function convertFromODataEntityType(odataEntityType, schema, metadataStore) {
var shortName = odataEntityType.name;
var ns = getNamespaceFor(shortName, schema);
var entityType = new EntityType({
shortName: shortName,
namespace: ns
});
---> **EXCEPTION HERE**--->var keyNamesOnServer = toArray(odataEntityType.key.propertyRef).map(__pluck("name"));
toArray(odataEntityType.property).forEach(function (prop) {
convertFromODataDataProperty(entityType, prop, schema, keyNamesOnServer);
});
toArray(odataEntityType.navigationProperty).forEach(function (prop) {
convertFromODataNavProperty(entityType, prop, schema);
});
metadataStore.addEntityType(entityType);
return entityType;
}
通过url查询odata服务会返回所需的结果,因此它似乎不是数据检索问题。
我已经做了一些搜索,并且原因被建议为微风还没有处理继承类型。
在我的情况下,我没有使用继承类型。
欢迎任何建议。
答案 0 :(得分:2)
这看起来像是没有为所讨论的EntityType定义“密钥”的问题。是否在底层服务器端实体类型上定义了一个键?
答案 1 :(得分:0)
你说的是没有定义密钥是对的。 查看浏览器中的〜/ odata / $元数据,未定义基础CustomerId
<Key>
<PropertyRef Name="CustomerId"/>
</Key>