Breeze InlineCount on Navigational而不扩展

时间:2014-07-16 19:56:07

标签: entity-framework breeze

如何在不扩展导航属性的情况下在Navigational上获得InlineCount。 我需要的只是计数,我不想要降低子实体的开销。

我想模仿像这样的SQL伪代码:

select 
    *, 
    (select count(*) from Child where ParentId = Parent.Id) as ChildCount
from Parent 
where id = 305

3 个答案:

答案 0 :(得分:1)

最简单的方法是在服务器上创建一个命名查询方法,如下所示(内置自定义计数逻辑)

[HttpGet]
public Int32 OrdersCountForCustomer(string companyName) {
  var customer =
    MyContextProvider.Context.Customers.Include("Orders").Where(c => c.CompanyName.StartsWith(companyName)).First();
  return customer.Orders.Count;
}

然后从客户端查询它:

var query = EntityQuery.from("OrdersCountForCustomer").withParameters({ companyName: "IBM" });
em.executeQuery(query).then(function (data) {
    var count = parseInt(data.results[0]);
});

答案 1 :(得分:1)

您不需要特殊的" OrdersCountForCustomer"为此目的的终点!

相反,您可以发出一个返回0结果的查询。

breeze.EntityQuery.from('Orders')
   .where('customerId', 'eq', theId)
   .take(0)
   .inlineCount(true)
   .using(em).execute()
   .then(function (data) {
       var count = data.inlineCount;
   });

我意识到这可能会解决数据层上的两个SQL请求(一个是查询零记录而另一个是计数),并且此类请求可能的可扩展性较低。但它的简单,通用,可扩展,可能不是实践中的性能问题,猜测会让你害怕。

答案 2 :(得分:0)

试试这个:

var query = EntityQuery.from("OrdersCountForCustomer").withParameters      ({companyName: "IBM" }).inlineCount(true);
em.executeQuery(query).then(function (data) {
var count = data.inlineCount;
});