用breeze检索记录

用breeze检索记录,breeze,Breeze,我用asp.NETMVC+breeze开发了一个应用程序 到目前为止,我检索了一条特定记录(基于id),如下所示: var getTransportById = function (transportId, transportObservable) { return manager.fetchEntityByKey('Transport', transportId, true) .then(fetchSucceeded)

我用asp.NETMVC+breeze开发了一个应用程序

到目前为止,我检索了一条特定记录(基于id),如下所示:

var getTransportById = function (transportId, transportObservable) {
       return manager.fetchEntityByKey('Transport', transportId, true)
               .then(fetchSucceeded)
               .fail(queryFailed);
}

function fetchSucceeded(data) {
   var s = data.entity;
   return ...
}
var getTransportById = function (transportId, transportObservable) {
    var query = EntityQuery.from('Transports')
                           .where('id', 'eq', transportId)
                           .expand('Sender')
                           .orderBy(orderBy.transport);

    return manager.executeQuery(query)
        .then(fetchSucceeded)
        .fail(queryFailed);
}

function fetchSucceeded(data) {
    var s = data.results[0];
    return ...
}
var entityKey = new EntityKey("Transport", transportId);
// expand whichever nav props you want here. 
var query = EntityQuery.fromEntityKey(entityKey).expand("Sender").orderBy(...);
return entityManager.executeQuery(query).then( {
  ...
});
现在我需要检索相同的记录,但需要“扩展”名为sender的属性,该属性链接到另一个实体(表)。我没有找到通过fetchEntityByKey来“扩展”一个属性的方法,因此我使用了如下查询:

var getTransportById = function (transportId, transportObservable) {
       return manager.fetchEntityByKey('Transport', transportId, true)
               .then(fetchSucceeded)
               .fail(queryFailed);
}

function fetchSucceeded(data) {
   var s = data.entity;
   return ...
}
var getTransportById = function (transportId, transportObservable) {
    var query = EntityQuery.from('Transports')
                           .where('id', 'eq', transportId)
                           .expand('Sender')
                           .orderBy(orderBy.transport);

    return manager.executeQuery(query)
        .then(fetchSucceeded)
        .fail(queryFailed);
}

function fetchSucceeded(data) {
    var s = data.results[0];
    return ...
}
var entityKey = new EntityKey("Transport", transportId);
// expand whichever nav props you want here. 
var query = EntityQuery.fromEntityKey(entityKey).expand("Sender").orderBy(...);
return entityManager.executeQuery(query).then( {
  ...
});
我的问题是:这是一个好办法吗?还有别的办法吗


谢谢。

您可以从EntityKey创建查询,然后展开所需的任何属性。大概是这样的:

var getTransportById = function (transportId, transportObservable) {
       return manager.fetchEntityByKey('Transport', transportId, true)
               .then(fetchSucceeded)
               .fail(queryFailed);
}

function fetchSucceeded(data) {
   var s = data.entity;
   return ...
}
var getTransportById = function (transportId, transportObservable) {
    var query = EntityQuery.from('Transports')
                           .where('id', 'eq', transportId)
                           .expand('Sender')
                           .orderBy(orderBy.transport);

    return manager.executeQuery(query)
        .then(fetchSucceeded)
        .fail(queryFailed);
}

function fetchSucceeded(data) {
    var s = data.results[0];
    return ...
}
var entityKey = new EntityKey("Transport", transportId);
// expand whichever nav props you want here. 
var query = EntityQuery.fromEntityKey(entityKey).expand("Sender").orderBy(...);
return entityManager.executeQuery(query).then( {
  ...
});

我不知道为什么,但当我尝试您的代码时,它只适用于缓存中已经存在的元素。以前向本地缓存添加新实体时,它不起作用,如下所示:
var newTransport=manager.createEntity(entityNames.transport,initialValues);增编经理(新运输)EntityQuery.fromEntityKey(entityKey)
它是在本地缓存中搜索还是在服务器上搜索?由于第三个参数设置为
true
,使用
manager.fetchEntityByKey('Transport',transportId,true)
允许我在本地缓存中搜索。我需要在本地缓存中搜索,因为这是一个新添加的实体。EntityQuery.fromEntityKey返回一个EntityQuery。默认情况下,任何EntityQuery都是远程查询,但您可以通过'using'子句和FetchStrategy(即query.using)(FetchStrategy.FromLocalCache)将其设置为本地查询