我正在使用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;
}