2012-12-01 37 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

工程就像一个魅力,感谢您的快速修复! –