2013-04-26 71 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>