2013-04-09 36 views
1

我正在用Durandal和BreezeJS開發一個SPA web應用程序。 在我的服務器上,我有一個BreezeAPI,它返回我的元數據,返回特定表中的所有數據,讓我說汽車和哪些讓我發佈我的更改(SaveChanges)。我應該使用BreezeJS在服務器上還是客戶端上進行查詢?

沒有讓我們回到那裏我得到的所有的汽車行駛的梅索德:

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

我明白我是如何與這些工作,但這裏是我的問題:是否有可能在查詢特定車服務器?或者只有在客戶端纔可以查詢AllCars中的數據?

希望有人能爲我清除天空;)

Gr。 Leroy

回答

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個執行完全在服務器上進行相同的查詢並返回完全相同的結果

希望這會有所幫助。

+0

這正是我的意思;)謝謝你,這是非常有益的! – 2013-04-10 07:28:10

相關問題