2016-09-23 6 views
0

저는 서버에서 IQueryable을 쿼리하기 위해 breezejs를 사용하고 있습니다. 문제는 내가 Guid가 자바 스크립트 문자열을 찾고 있기 때문에 서버에서 문자열이고 breezejs가 자바 스크립트 문자열의 데이터 유형을 대신 Guid로 해석하기 때문입니다. 서버를 변경할 수 없으므로 .toType 함수를 사용하여 명시 적으로 breeze에 끝점 쿼리의 유형을 알릴 수 있어야합니다.BreezeJS .toType 오류 "정의되지 않은 'push'속성을 읽을 수 없습니다."

   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가 재귀 적으로 entitled의 형제를 찾는 것과 관련이 있습니다. 회사에서 AspNetUserRole을 찾고있는 것이 아닌 형제가 null인지 또는 정의되지 않았고 불어 났는지 확인하지 않는 것 같습니다. 회사는 AspNetUserRole에 외래 키를 가지고 있지 않으므로 아무것도 찾지 않아야합니다. 나에게 breezejs 버그처럼 보입니다.

[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') 있다는 사실과 관련이있다; 나는 앉아서 그것에 대해 생각할 때 명백하다.