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

リモートクエリとローカルクエリの2つの一般的な方法:

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": {...}}] 

ローカルクエリはselectを無視し、TeamUserの結果の配列を返します。

res=[{ Here are the fields of TeamUsers }, { Here are the fields of TeamUsers }]

'selectStr'を'bla'のような無効なタイプに変更しても、例外はスローされません。なぜselectが省略されているのですか?

4

1 に答える 1

3

v 0.74.3以降、これは修正されるはずです。つまり、select句は、リモートクエリだけでなくローカルクエリでも正しく解釈されるようになります。お役に立てれば。

于 2012-12-06T23:36:34.080 に答える