breeze.js普通的旧sql

时间:2015-02-08 22:49:03

标签: javascript sql wcf breeze

我正在评估我应该在项目中使用Breeze.js的过程。据我所知,Breeze使用某种linq-esque语言将查询发送到服务器,然后发送到数据库。 Breeze.js是否允许替代使用普通的旧sql?例如:

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

事实上,我想知道Breeze是否支持此功能的主要原因是我将要制作一些非常复杂的查询,一些非常复杂的构建版本。并且弄清楚如何用他们的linq-esque语言构建这些查询 - 目前 - 将花费我没有的宝贵时间。 另外我想知道Breeze.js是否可以与WCF一起使用,因为我在这几天看到的大部分示例也都是Web API。 (在我们的项目中,我们已经在大量使用WCF)。 感谢社区

1 个答案:

答案 0 :(得分: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