2013-04-26 63 views
0

我目前正在研究有关这些技术的概念证明。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服务会返回我想要的结果,所以它似乎不是数据检索问题。

我已经做了一些搜索,并提出了原因,因为微风尚未处理继承类型。

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

欢迎任何建议。

回答

2

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

0

你说得对,关键没有定义。 查看浏览器中的〜/ odata/$元数据,未定义底层CustomerId

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