2012-12-01 35 views
1

模型(暴露映射表許多一對多關係):本地查詢省略/忽略投影用「選擇」

public class TeamUsers 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long TeamUsersId { get; set; } 

    public Team Team { get; set; } 
    public User User { get; set; } 

    public bool Temporary { get; set; } 
} 

兩個遠程和本地查詢的一般方法:

getAllOfTypeSelectRemote = function (manager, success, failed, resource, orderBy, predicate, select) { 
      var query = EntityQuery 
       .from(resource) 
       .where(predicate) 
       .using(manager) 
       .select(select) //<------ 
       .orderBy(orderBy); 
      return query.execute() 
       .then(success) 
       .fail(failed); 
     }, 

getAllOfTypeSelectLocally = function (manager, resource, orderBy, predicate, select) { 
      var res = null; 
      try { 
       res = EntityQuery 
       .from(resource) 
       .where(predicate) 
       .select(select) //<----- 
       .orderBy(orderBy) 
       .using(manager) 
       .executeLocally(); 
      } catch (e) { 
       logger.error('resource: ' + resource + '<br>select: ' + select + '<br>orderBy:' + orderBy, 'Local query failed!'); 
      } 
      return res; 
     }; 

叫這樣:

var selectStr = 'User'; //<------ 

      var p1 = new breeze.Predicate("Team.TeamName", Qop.Equals, team); 
      var p2 = breeze.Predicate("User.UserName", Qop.NotEquals, username); 
      var predicate = p1.and(p2); 

      //var res = dsUtils.getAllOfTypeSelectRemote(manager, success, queryFailed, 'TeamUsers', 'User.Nachname, User.Vorname', p1, select); 
      var res = dsUtils.getAllOfTypeSelectLocally(manager, 'TeamUsers', 'User.Nachname, User.Vorname', p1, selectStr); 

遠程查詢返回用戶實體的陣列,其是正確的,我相信。按照預期,將'selectStr'修改爲像'bla'這樣的無效類型會引發異常。 結果:

data.results = [{"User": {...}}, {"User": {...}}] 

的本地查詢只是忽略選擇並返回的TeamUser 結果的數組:

res=[{ Here are the fields of TeamUsers }, { Here are the fields of TeamUsers }] 

修改「selectStr」爲無效類型像「BLA」拋出也不例外。 爲什麼選擇省略,這應該是這樣嗎?

+1

看着源代碼,它顯示Breeze沒有應用'select'子句來緩存查詢。我在內部提交了一份缺陷報告。同時,你可以通過在過濾結果中使用'Array.Map'來解決它嗎? – Ward

+0

我正在使用現在可以使用的遠程版本。如果我找到時間,我會嘗試讓本地版本工作。 –

+0

謝謝。讓我知情! – Ward

回答

3

從v 0.74.3開始,這應該是固定的;即選擇子句現在將被本地查詢和遠程查詢正確解釋。希望這可以幫助。

+0

工程就像一個魅力,感謝您的快速修復! –