我应该使用BreezeJS在服务器或客户端上查询吗?

时间:2013-04-09 14:47:44

标签: javascript breeze durandal

我正在使用Durandal和BreezeJS开发SPA Web应用程序。 在我的服务器上,我有一个BreezeAPI,它返回我的元数据,返回特定表中的所有数据,让我们说汽车,并让我发布我的更改(SaveChanges)。

不,让我们回到我用方法获得所有汽车的地方:

[HttpGet]
    public IQueryable<tblCar>AllCars()
    {
        return _contextProvider.Context.Car;
    }

我理解我需要如何使用这些,但这是我的问题:是否可以查询服务器上的特定汽车?或者这只能在客户端进行,我从AllCars查询我提取的数据?

希望有人能为我扫清天空;)

的Gr。乐华

1 个答案:

答案 0 :(得分:3)

默认情况下,清除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);

需要明确的重要一点是,所有这三个在服务器上执行完全相同的查询并返回完全相同的结果

希望这有帮助。