次のコードを検討してください。
function getPersonById(personId, type) {
var p1 = new breeze.Predicate("Id", "==", personId);
var p2 = new breeze.Predicate("Type", "==", type);
var query = breeze.EntityQuery.from("Contacts").where(p1.and(p2))
if (!manager.metadataStore.hasMetadataFor(service.serviceName)) {
return manager.fetchMetadata().then(function () {
return manager.executeQuery(query.using(service));
});
} else {
var fromCache = manager.getEntityByKey('Contact', personId);
if (fromCache)
return Q.resolve(fromCache);
return manager.executeQuery(query.using(service));
}
}
私は物事を正しい方法で行っていますか? エンティティをフェッチするためだけに、定型コードをたくさん書かなければならないように思えます。メタデータが既知であることを確認し、エンティティが既にキャッシュにあるかどうかを確認する必要がありました。
executeQuery が呼び出されると、戻り値が配列になるため、問題に直面しています。ただし、getEntityByKey が呼び出された場合、戻り値はエンティティです。どうすればエレガントな方法でそれを処理できますか? 配列ではなく単一のエンティティを返すように executeQuery を強制する方法はありますか? (とにかく、返される値は1つだけだと思っています)