1
模型(暴露映射表許多一對多關係):本地查詢省略/忽略投影用「選擇」
public class TeamUsers
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long TeamUsersId { get; set; }
public Team Team { get; set; }
public User User { get; set; }
public bool Temporary { get; set; }
}
兩個遠程和本地查詢的一般方法:
getAllOfTypeSelectRemote = function (manager, success, failed, resource, orderBy, predicate, select) {
var query = EntityQuery
.from(resource)
.where(predicate)
.using(manager)
.select(select) //<------
.orderBy(orderBy);
return query.execute()
.then(success)
.fail(failed);
},
getAllOfTypeSelectLocally = function (manager, resource, orderBy, predicate, select) {
var res = null;
try {
res = EntityQuery
.from(resource)
.where(predicate)
.select(select) //<-----
.orderBy(orderBy)
.using(manager)
.executeLocally();
} catch (e) {
logger.error('resource: ' + resource + '<br>select: ' + select + '<br>orderBy:' + orderBy, 'Local query failed!');
}
return res;
};
叫這樣:
var selectStr = 'User'; //<------
var p1 = new breeze.Predicate("Team.TeamName", Qop.Equals, team);
var p2 = breeze.Predicate("User.UserName", Qop.NotEquals, username);
var predicate = p1.and(p2);
//var res = dsUtils.getAllOfTypeSelectRemote(manager, success, queryFailed, 'TeamUsers', 'User.Nachname, User.Vorname', p1, select);
var res = dsUtils.getAllOfTypeSelectLocally(manager, 'TeamUsers', 'User.Nachname, User.Vorname', p1, selectStr);
遠程查詢返回用戶實體的陣列,其是正確的,我相信。按照預期,將'selectStr'修改爲像'bla'這樣的無效類型會引發異常。 結果:
data.results = [{"User": {...}}, {"User": {...}}]
的本地查詢只是忽略選擇並返回的TeamUser 結果的數組:
res=[{ Here are the fields of TeamUsers }, { Here are the fields of TeamUsers }]
修改「selectStr」爲無效類型像「BLA」拋出也不例外。 爲什麼選擇省略,這應該是這樣嗎?
看着源代碼,它顯示Breeze沒有應用'select'子句來緩存查詢。我在內部提交了一份缺陷報告。同時,你可以通過在過濾結果中使用'Array.Map'來解決它嗎? – Ward
我正在使用現在可以使用的遠程版本。如果我找到時間,我會嘗試讓本地版本工作。 –
謝謝。讓我知情! – Ward