2016-09-23 106 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”)做的;很显然,当我坐下来想一想。

相关问题