我应该在服务器上查询还是在客户端用BreezeJS查询?

问题描述 投票:1回答:1

我正在用Durandal和BreezeJS开发一个SPA网络应用。在我的服务器上,我有一个BreezeAPI,它可以返回我的元数据,返回一个特定表格中的所有数据,比如说汽车,并且允许我发布我的更改(SaveChanges)。

现在让我们回到我用这个方法获得所有汽车的地方。

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

我明白我需要如何处理这些数据,但我的问题是: 是否可以在服务器上查询特定的车?还是说这只能在客户端查询我从AllCars获取的数据?

javascript breeze durandal
1个回答
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);

最重要的是要明确的是,所有这3种方式 在服务器上执行完全相同的查询,并返回完全相同的结果。.

希望能帮到你

© www.soinside.com 2019 - 2024. All rights reserved.