2015-02-08 45 views
1

我正在評估的過程中,我應該在我的項目中使用Breeze.js。我知道Breeze使用某種linq-esque語言將查詢發送到服務器,然後發送到數據庫。 Breeze.js允許替代使用普通的舊sql嗎?例如:breeze.js普通舊sql

var plain_old_query = EntityQuery.from_plain_old_query('select * from customers where bla bla bla'); 
manager.executePlainOldQuery(plain_old_query) 

其實我想主要的原因知道微風支持此功能是,我會有一些非常複雜的查詢做,一些非常複雜的whereclause建立。想想如何用他們的linq-esque語言構建這些查詢 - 目前 - 將花費我沒有的寶貴時間。 另外我想知道Breeze.js是否可以與WCF一起工作,因爲我在這幾天看過的大多數例子都是專門用於Web API的。 (在我們的項目中,我們已經大量使用WCF)。 感謝社區

回答

1

Breeze不支持SQL查詢語法,但您可以使用Breeze與具有此功能的端點通話。如果使用withParameters功能,則可以使用從客戶端傳遞的參數在服務器上組合SQL查詢。例如,你可以有一個服務器端的方法:

[HttpGet] 
    public IQueryable<Customer> CustomersWhoPurchasedProducts(string zipCode, DateTime startDate, DateTime endDate, [FromUri] int[] productIds) 
    { 
     var query = ComposeCustomerQueryFromParameters(zipCode, startDate, endDate, productIds); 
     IQueryable<Customer> results = ExecuteQueryIntoCustomerObjects(query); 
     return results; 
    } 

注意,如果你的服務器端方法返回IQueryable<>,那麼更多的過濾可以被添加到最初的結果是返回到客戶端之前。 Breeze可以將過濾數據添加到查詢中。因此,您的Breeze客戶端可以這樣調用您的服務器方法:

// query with parameters 
var query = EntityQuery.from("CustomersWhoPurchasedProducts") 
    .withParameters({ 
     zipCode: 90210, 
     startDate: new Date(2014, 1, 1).toISOString(), 
     endDate: new Date(2014, 4, 1).toISOString(), 
     productIds: [911, 928, 935, 944] 
    }); 

// Add filtering 
query = query.where('CompanyName', 'startsWith', 'A'); 
// Add paging 
query = query.skip(20).take(10); 

對不起,我沒有WCF示例指向您。從概念上講,它將類似於Web API,但您需要configure it to return JSON

+0

謝謝。我會嘗試你的建議 – TheSoul 2015-02-09 07:48:15

+0

謝謝,我試過你的建議,它按預期工作。 – TheSoul 2015-02-10 15:29:53