Breeze.js与asp.net web api odata和代码优先

时间:2013-04-26 06:15:57

标签: asp.net-web-api odata code-first breeze

我目前正在研究与这些技术相关的概念证明。

我基本上已经实现了本文中的建议,但首先使用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服务会返回所需的结果,因此它似乎不是数据检索问题。

我已经做了一些搜索,并且原因被建议为微风还没有处理继承类型。

在我的情况下,我没有使用继承类型。

欢迎任何建议。

2 个答案:

答案 0 :(得分:2)

这看起来像是没有为所讨论的EntityType定义“密钥”的问题。是否在底层服务器端实体类型上定义了一个键?

答案 1 :(得分:0)

你说的是没有定义密钥是对的。 查看浏览器中的〜/ odata / $元数据,未定义基础CustomerId

<Key>
 <PropertyRef Name="CustomerId"/>
</Key>