我正在使用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;
}
答案 0 :(得分:0)
问题与我返回&#34; UserRoleViewModel&#34;的事实有关。但我是.toType(&#39; AspNetUserRole&#39;);当我坐下来思考它时显而易见。