1

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

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

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

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

4

1 回答 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 个都在服务器上执行完全相同的查询并返回完全相同的结果

希望这可以帮助。

于 2013-04-09T17:13:01.633 回答