2013-03-28 55 views
0

我已經成功地通過創建自定義元數據定義並將其添加到breeze實體管理器來將微風連接到服務器上的自定義類型。使用Breeze無數據庫擴展屬性(NoDb)

但是,我無法請求一個已經在javascript中自定義定義的對象(Employee)並完全檢索它的關係。

換句話說,我有一個名爲Employee的對象,它有一個名爲「LoginStats」的屬性,它是服務器上的List類型。當請求只使用一個微風要素回報的集合在這個對象的時候應該有6

的$承諾看起來像這樣的結果:

data.results[0].loginStats()[0] //object 
data.results[0].loginStats()[1] //undefined 

奇怪的是,如果我單獨選擇屬性,例如.select(「LoginStats」),它會返回數組中的6個項目。

我怎樣才能檢索這個對象而不用拼出所有需要的屬性使用微風電話?我試圖使用.expand()子句,但不幸的是我們沒有以這種方式連接到EntityFramework。

在此先感謝!

編輯:Here's a sample of what it looks like當我使用「選擇」語句vs只是請求對象。這些圖片還演示了當我選擇所有屬性時會發生什麼,這是他們都正確填寫,但他們不再是可觀察的。 Eeeek!

控制器代碼:

 [HttpGet] 
     public IQueryable<Employee> Get(string id) 
     { 
      var criterion = new Criterion<Employee, bool>(e => e.CustomerId == id); 
      var loginStatisticsExtendedProperty = new FillEmployeeLoginStatistics(_UserRoleProvider, _CustomerLoginStatsViewModelRepository); 
      var availableCompaniesForEmployess = new AvailableCompaniesForEmployess(_CompanyAffiliatesRepository); 
      return _EmployeeRepository.Find(criterion, loginStatisticsExtendedProperty, _EmployeeDetailsExtendedProperty, availableCompaniesForEmployess); 
     } 

回答

0

沒有看到什麼服務器端控制方法(S),你在呼喚它很難判斷是肯定的。但我有幾個建議。

首先確保您的控制器方法返回一個IQueryable集合。這僅在您想要使用客戶端查詢來進一步限制資源時纔是必需的。在返回集合之前,通常只需添加.AsQueryable()調用即可使任何集合成爲IQueryable。

其次,「擴展」語法只能針對EF支持的IQueryables進行操作。但是你仍然可以從客戶端返回對象的圖形,只要它們與父對象一起「序列化」即可。對於「無數據庫」類型的資源,這通常意味着您需要在服務器上強制要發送到客戶端的任何導航屬性的解析。如果你添加一個JsonResultsAdapter,你實際上可以通過在'visitNode'方法內部進行斷點化來調試'正在被序列化到客戶端的東西。

請發佈您的控制器方法def如果這是不夠的。

+0

謝謝Jay。我已經更新了相冊(http://imgur.com/a/13158)以顯示我的控制器。這是黑色背景圖片。我已經將它作爲IQueryable返回,但與它們關聯的集合是否需要可查詢?他們目前是名單。 – letsgetsilly

+0

與它們相關的集合不需要可查詢,但在您的情況下,確實需要確保這些集合與父級一起被序列化。看看來自服務器的json負載,看看這些集合是否會通過線路傳輸。同樣值得檢查的是,這些集合中的「實體」具有映射到您的客戶端實體類型之一的json $ type屬性(假設您正在使用BreezeController屬性)。 –

+0

JSON是正確的。我直接請求URL時看到顯示這些集合。我添加了一個圖片到畫廊來說明。 – letsgetsilly