breeze.js 普通老 sql

breeze.js plain old sql

我正在评估是否应该在我的项目中使用 Breeze.js。我知道 Breeze 使用某种类似 linq 的语言将查询发送到服务器,然后再发送到数据库。 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 是否支持此功能的主要原因是我要进行一些非常复杂的查询,要构建一些非常复杂的 whereclause。并弄清楚如何使用他们的 linq-esque 语言构建这些查询 - 目前 - 会花费我没有的宝贵时间。 此外,我想知道 Breeze.js 是否可以与 WCF 一起使用,因为这几天我一直在看的大多数示例也专门用于 Web API。 (在我们的项目中,我们已经大量使用 WCF)。 感谢社区

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;
    }

请注意,如果您的服务器端方法 returns 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.