Breeze.js与asp.net web api odata和代码优先
问题描述:
我目前正在研究有关这些技术的概念证明。Breeze.js与asp.net web api odata和代码优先
我已经基本实现了本文中建议的内容,首先使用EF代码除外。
Consuming an ASP.NET Web API OData Service with Breeze
例外即
“遗漏的类型错误:无法读取的未定义的属性 '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服务会返回我想要的结果,所以它似乎不是数据检索问题。
我已经做了一些搜索,并提出了原因,因为微风尚未处理继承类型。
在我的情况下,我没有使用继承类型。
欢迎任何建议。
答
这看起来像一个问题,没有为所讨论的EntityType定义“键”。在底层服务器端实体类型上是否定义了一个键?
答
你说得对,关键没有定义。 查看浏览器中的〜/ odata/$元数据,未定义底层CustomerId
<Key>
<PropertyRef Name="CustomerId"/>
</Key>