我正在用Durandal和BreezeJS开发一个SPA网络应用。在我的服务器上,我有一个BreezeAPI,它可以返回我的元数据,返回一个特定表格中的所有数据,比如说汽车,并且允许我发布我的更改(SaveChanges)。
现在让我们回到我用这个方法获得所有汽车的地方。
[HttpGet]
public IQueryable<tblCar>AllCars()
{
return _contextProvider.Context.Car;
}
我明白我需要如何处理这些数据,但我的问题是: 是否可以在服务器上查询特定的车?还是说这只能在客户端查询我从AllCars获取的数据?
只是想说明一下,默认情况下,Breeze中的所有查询都只在服务器上执行。(你可以查询本地查询缓存,但我不认为那是你所问的。) 你可以控制的是要执行的查询表达式是完全在服务器上定义的,还是基于服务器上定义的查询以及额外的客户端限制组成的。
如果你想在服务器上定义一个返回单个记录的查询,你当然可以这样做。 它看起来像这样。
[HttpGet]
public Car Car17()
{
return _contextProvider.Context.Cars.First(c => c.CarId == 17);
}
可以从客户端通过以下方式进行查询:
var q = EntityQuery.from("Car17");
或者你可以使用查询参数:
[HttpGet]
public Car CarById(carId)
{
return _contextProvider.Context.Cars.First(c => c.CarId == carId);
}
查询参数是这样的:
var q = EntityQuery.from("CarById").withParameters( { carId: 17} );
或者你可以这样做:
[HttpGet]
public IQueryable<Car> AllCars()
{
return _contextProvider.Context.Cars;
}
这样的查询就会是这样的
var q = EntityQuery.from("AllCars").where("CarId", "==", 17);
最重要的是要明确的是,所有这3种方式 在服务器上执行完全相同的查询,并返回完全相同的结果。.
希望能帮到你