簡體   English   中英

Breeze為每個odata查詢詢問元數據

[英]Breeze asking for metadata for each odata query

當我使用帶有三個選擇查詢的新的breeze角度服務運行一個簡單的Angular頁面時,我看到微風正在請求三個元數據副本。 有沒有辦法可以減少兩個額外的元數據調用?

我創建了一個EntityManager實例,然后發出三個查詢。

var entityManager = entityManagerFactory.newManager();

    var query = breeze.EntityQuery
      .from("Customers")
      .expand("Orders")
      .orderBy('FName, LName');

    getSet(query, 'my.customers');

    query = breeze.EntityQuery
      .from("Items")
      .orderBy('ItemID');

    getSet(query, 'my.items');

    query = breeze.EntityQuery
      .from("Orders")
      .expand("Details")
      .orderBy('DropDate');

    getSet(query, 'my.orders');

    function getSet(query,setName) {
      entityManager.executeQuery(query)
      .then(function (data) {
        var model = $parse(setName);
        model.assign($scope, data.results);
      })
      .catch(failed)
      .finally(refreshView);
    }

當我跟Fiddler追蹤時,我看到先返回三個元數據,然后返回三個查詢。

編輯------------------------------------------------- -------------

在查詢解決問題之前預取元數據。 現在,只有一個請求。

function getMetadata(manager) {
      manager.fetchMetadata()
        .then(getSets);
}

我猜,你連續三次獲取元數據因為你同時啟動了三個查詢而沒有等待第一次完成。

breeze中的第一個查詢(或直接元數據獲取)加載EntityManager的元數據。 任何后續查詢都不會獲取元數據。

我認為,你正在做的是在第一次返回元數據之前要求breeze執行多個查詢。 因為每個查詢都在檢查尚未從服務器返回的元數據,所以每個查詢都提交它自己的元數據獲取請求。 因此,三個元數據獲取請求。

您可以通過預取元數據,通過EntityManager.fetchMetadata或提交第一個查詢來避免這種情況, 然后您需要推遲任何其他查詢,直到解決了返回的promise

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM