2016-09-23 96 views
0

我正在使用breezejs查詢服務器上的IQueryable。這個問題已經出現,因爲我有一個Guid看起來的javascript字符串,在服務器上是一個字符串,而breezejs將JavaScript字符串的數據類型解釋爲Guid。由於我無法更改服務器,因此我找到了應該能夠使用.toType函數來明確告訴端點查詢的類型的地方。BreezeJS .toType錯誤「無法讀取未定義的屬性'推'

   var data = "e65ec82e-8b58-4a56-9c3f-a02a44d36045"; 
       var predicate = { "UserId": { "==": data } }; 
       var query = breeze.EntityQuery.from('UserRoleApi/Search'); 
       if (predicate != null) { 
        query = query.where(predicate).toType('AspNetUserRole'); 
       } 
       query = query.skip(page * pageSize).take(pageSize); 

       breezeservice.executeQuery(query).then(function (data) { 

此代碼給我錯誤「無法讀取未定義的屬性'push'。如果沒有.toType,我會得到一個涉及在guid和字符串之間使用'eq'的錯誤。在元數據中找到並修正'AspNetUserRole'類型。任何幫助,將不勝感激。

看來我的問題在於breeze.js文件。

if (newValue != null) { 
     debugger; 
    var siblings = newValue.getProperty(inverseProp.name); 
    // recursion check if already in the collection is performed by the  relationArray 
    siblings.push(parent); 
    } 

兄弟姐妹是未定義的。不知道這是不是一個breezejs錯誤。必須調查更多。

現在我發現如果我沒有評論的代碼註釋我得到的錯誤,否則我沒有得到一個錯誤,我得到正確的答案。所以問題不在於.toType,而是與breezejs遞歸地尋找實體的兄弟姐妹。它看起來像是在尋找公司的AspNetUserRole,並沒有找到它,但沒有檢查兄弟姐妹是不是空的或未定義和炸燬。公司沒有AspNetUserRole的外鍵,所以它不應該找到任何東西。對我來說,這看起來像一個微風蟲。

[HttpGet] 
    public IQueryable<UserRoleViewModel> Search() 
    { 
     var response = repository.Search().Select(x => new UserRoleViewModel() 
     { 
      Id = x.Id, 
      UserId = x.UserId, 
      RoleId = x.RoleId, 
      CompanyId = x.CompanyId 
      //Company = new CompanyViewModel() 
      //{ 
      // Id = x.Company.Id, 
      // Name = x.Company.Name 
      //}, 
      //User = new UserViewModel() 
      //{ 
      // Id = x.AspNetUser.Id, 
      // UserName = x.AspNetUser.UserName 
      //}, 
      //Role = new RoleViewModel() 
      //{ 
      // Id = x.AspNetRole.Id, 
      // Name = x.AspNetRole.Name 
      //} 
     }); 
     return response; 
    } 

回答

0

問題是與事實,我是返回一個「UserRoleViewModel」但我是.toType(「AspNetUserRole」)做的;很顯然,當我坐下來想一想。

相關問題