2013-11-28 52 views
1

首先,我真的非常感謝開發者...... Breeze絕對是太棒了,我無法感謝您的辛勤工作!儘管[BreezeQueryable(MaxExpansionDepth = 100)],深度展開無法正常工作

我一直在使用Breeze和EF(最新的Breeze,最新的EF)一段時間,並且在一些數據庫更改後,我現在被迫查詢第四層對象...起初,我碰到MaxExpansionDepth已達到的錯誤,但根據SO上的幾個問題/答案,我找到[BreezeQueryable(MaxExpansionDepth = x)]屬性。我已經將該屬性應用於控制器上的相關查詢功能,從而消除了錯誤......但是,第四級的數據仍然沒有填寫。

我已經用特定的查詢(基於4rth級別數據的關鍵字)成功檢索了有問題的數據,並且在服務器端玩時一切正常......關係正常工作等等......麻煩查詢如下:

function getPatient(patKey) { 
    var query = breeze.EntityQuery 
      .from("Patients") 
      .where("Key", "==", patKey) 
      .expand("..., ScanDates.Printouts.BMDSites, ..."); 

    return app.dataservice.manager.executeQuery(query); 
} 

順便說一句 - 這是所有的單一病人,所以真的沒有那麼多的數據 - 它只是分隔很多!

如果有人有任何想法,我會非常感激!

乾杯, 布拉德

PS:很顯然,我並不需要一個 「MaxExpansionDepth = 100」,但我也試圖與低值(4,5等)

編輯感謝Dominictus,我現在意識到真正的問題並不在於查詢的深度 - BMDSites在響應中回來,但無論擴展深度如何,都不實現實體。如果我只是爲他們查詢(即BMDSites的PrintoutKey = x),他們會實現物化......但是,這又會導致10或15次到達服務器。我仍然很想知道如何一次搞定所有東西,或者只是瞭解爲什麼這些東西不會實現擴張!

編輯2:它只是發生在我身上的打印輸出類是基類TPH繼承層次的...在其他一些問題,環顧四周,我懷疑這是有可能的來源問題。

回答

1

原來,它與繼承或擴展的深度無關......在創建簡化模型時,我當然發現它工作得很好。加入我認爲無關緊要的特性後,我最終破壞了它,並通過添加一些[NotMapped]屬性來複制我的問題,這些屬性提供了對BMDSites列表的一些簡單訪問。例如,在打印輸出從派生的類:

[NotMapped] 
    public BMDSite _Ud = null; 

    [NotMapped] 
    public BMDSite Ud 
    { 
     get 
     { 
      if (_Ud == null) 
      { 
       _Ud = BMDSites.Find(b => b.Region == Region.Forearm_UD); 
      } 
      return _Ud; 
     } 
    } 

一旦在添加該回來了,再一次,我BMDSites的名單並沒有填充。原來JSON。Breeze使用的淨類不看[NotMapped](這是有道理的,因爲它是序列化,而不是數據庫映射)...通過在我的EF模型中添加對JSON.net的引用,並添加它的equivilent標籤 - 即:[NotMapped,JsonIgnore],它沒有看屬性,並且一切正常。

底線(對於那些脫脂)...上面的代碼會造成一些問題,下面的代碼工作正常:

[NotMapped, JsonIgnore] 
    public BMDSite _Ud = null; 

    [NotMapped, JsonIgnore] 
    public BMDSite Ud 
    { 
     get 
     { 
      if (_Ud == null) 
      { 
       _Ud = BMDSites.Find(b => b.Region == Region.Forearm_UD); 
      } 
      return _Ud; 
     } 
    } 

乾杯, 布拉德的建議

0

如果你使用一些其他的查詢Patients行動,我建議你複製Patients方法,將其命名爲類似PatientsFull,並在那裏做.Include而非客戶方expand。有時擴展不能按預期工作。 (如果這是對Patients的唯一查詢,那麼只需更改該方法)

對於一些不同的想法,您必須記下彈出到控制檯中的任何可能的錯誤。

+0

謝謝...還沒加載,但它確實讓我想直接檢查響應 - 數據存在於對查詢的響應中(使用您在操作中的.Include建議或原始擴展查詢)......它只是沒有物化通過微風進入物體!?對不起,如果我以前不清楚 - 客戶端或服務器上沒有顯示錯誤。 – bparcels