2013-11-29 38 views
0

我剛剛添加擴展到我的查詢第四層 - 即:一些對象沒有實現(但在查詢響應中) - 繼承問題?

 .expand("..., ScanDates.Printouts.BMDSites, ..."); 

而且我發現,雖然該數據在響應返回,不填充下面的「打印輸出的對象「(即patient.ScanDates.Printouts.BMDSites是一個空數組,儘管在響應中返回了幾個元素)。

我已經更改了控制器操作上的MaxExpansionDepth,並且在控制檯或服務器端沒有出現錯誤。我也成功地通過單獨查詢它們來填充BMDSite對象,但這意味着需要十到二十次返回到服務器......這並不理想。

編輯:我只是嘗試了其他幾個查詢,似乎,即使我只是在做一個單一的擴大(即:.expand(「BMDSites」)),發生同樣的問題 - 數據是作爲迴應,但沒有實體化。當我爲BMDSites查詢時(例如,針對特定的打印輸出),數組被正確填充和物化。

編輯2:它只是發生在我身上的打印輸出類是基類TPH繼承層次的......環顧了一下,我懷疑這可能是問題的根源。

非常感謝您的任何想法! -Brad

回答

1

看起來它畢竟與繼承無關...在爲Jay創建簡化模型時,我當然發現它工作得很好。加入我認爲無關緊要的特性後,我最終破壞了它,並通過添加一些[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的名單並沒有填充編輯 - 更具體地說,是被一個未映射摸了BMDSite財產被排除在BMDSites名單之外)。事實證明,Breeze使用的JSON.net類不​​會看[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

我首先要確保您所做的'擴展'實際上是有效的,方法是使用'Include'在服務器上嘗試完全相同的查詢。如果失敗了,那麼問題可能出在您的模型上。 Breeze'擴展的變成了EF'Include'。

如果查詢在純EF中起作用,那麼您是否可以詳細說明模型中的相關屬性以及繼承層次結構的樣子,以便我們可以嘗試複製您的問題?

+0

感謝這麼多的響應周杰倫。做擴展爲包括在服務器上運行良好,所以我開始創建一個簡化的模型來發布/複製這個問題 - 這當然工作得很好。我繼續添加功能(我認爲是無關緊要的),直到我再次打破它。原來是Printout對象上的一些[NotMapped]屬性。解決方案是在EF模型中添加對JSON.net的引用,並在[NotMapped]之外添加[JsonIgnore]。我會在下面發表更多的細節,以防其他人遇到同樣的情況。再次感謝您的時間+辛勤工作 - 愛Breeze。 -Brad – bparcels

+0

任何其他細節都會很好,請將此問題標記爲已回答,以便其他人知道這是可以解決的。謝謝。 –