如何使用Breeze查询常规可查询Web Api端点?

时间:2014-04-05 20:04:55

标签: javascript asp.net-web-api odata breeze

是否可以使用breeze查询既不是具有breeze属性的控制器又具有带元数据的odata端点的端点?假设我们有一个像这样的控制器:

public class PersonsController : ApiController
{
    private AppContext db = new AppContext();
    [Queryable]
    public IQueryable<Person> Get()
    {
        return db.People;
    }
}

我已启用通过查询参数进行过滤,并希望使用Breeze库检索数据,下面的示例失败,因为breeze尝试查询api /元数据,当然这个控制器没有这样的元数据。< / p>

'use strict';
var serviceName = "api/";
breeze.config.initializeAdapterInstances({ dataService: "WebApi" });
var manager = new breeze.EntityManager(serviceName);
// would like a GET api/persons?$orderby=LastName&$skip=50&$top=10
var qry = breeze.EntityQuery.from('persons').orderBy("LastName").skip(50).take(10);

manager.executeQuery(qry).then(function (data) {
   //expecting data.results to contain the filtered/sorted set of Persons
});

是否支持使用微风查询非微风/ odata api控制器?

1 个答案:

答案 0 :(得分:2)

对于任何breeze DataService,您都可以告诉breeze不要期望服务的元数据。

默认情况下,breeze确实希望从服务中获取元数据,因此您需要通过设置DataService&#39; hasServerMetadata&#39;来告诉微风。为假。像这样:

    var dataService = new DataService({
        serviceName: "aaa/bbb/myService",
        hasServerMetadata: false
    });

    return new EntityManager({
        dataService: dataService,
    });

如果您这样做,那么您还需要直接在客户端上描述元数据。有关如何执行此操作,请参阅http://www.breezejs.com/documentation/metadata-by-hand。如果您没有描述元数据,那么breeze会将任何查询的结果视为匿名类型,而不是将结果合并到本地EntityManager中。