BreezeJS .toType错误“无法读取未定义的属性'push'

时间:2016-09-23 14:50:25

标签: c# .net breeze

我正在使用breezejs来查询服务器上的IQueryable。问题出现了,因为我有一个Guid看javascript字符串,在服务器上是一个字符串,而breezejs正在将javascript字符串的数据类型解释为Guid。由于我无法更改服务器,因此我发现我应该能够使用.toType函数明确告诉breeze端点查询的类型。

                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) {

此代码给出了错误“无法读取未定义的属性'推送”。如果没有.toType,我会收到一个错误,涉及在guid和string之间使用'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递归寻找entites的兄弟姐妹。看起来它正在寻找公司的AspNetUserRole并没有找到它,但没有检查兄弟姐妹是不是空或未定义和爆炸。公司没有AspNetUserRole的外键,所以它不应该找到任何东西。对我来说似乎是一个breezejs的bug。

[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;
    }

1 个答案:

答案 0 :(得分:0)

问题与我返回&#34; UserRoleViewModel&#34;的事实有关。但我是.toType(&#39; AspNetUserRole&#39;);当我坐下来思考它时显而易见。