breezejs:混合EF上下文和IQueryable

时间:2013-09-09 09:24:45

标签: javascript breeze

我在这里遇到了一个不寻常的情况。我有一个WebAPI breeze控制器,其中包含以下操作方法:

    [HttpGet]
    public IQueryable<Client> Clients(bool IsEbasys = false)
    {
        if (IsEbasys)
        {
            List<Client> lst = new List<Client>();
            lst.Add(new Client() {  FirstName = "Sam", LastName = "Smyth" });
            return lst.ToList().AsQueryable<Client>();
        }
        else
        {
            return _contextProvider.Context.Clients;
        }
    }

2个场景:

如果我删除了班级上的[BreezeController]属性,则硬编码列表将被正常返回。但当然第二个不再有效(实际上,无论查询过滤器如何,它都会返回所有客户端实体)。

如果我在我的类上添加[BreezeController]属性,则查询上下文按预期工作,但由于某些原因,硬编码列表作为空数组返回给客户端,尽管它应该包含一个客户端。

这有解决方法吗?或者我不能只在同一个控制器中混合两个?

1 个答案:

答案 0 :(得分:3)

您是否尝试将BreezeQueryable属性添加到方法中?

[HttpGet]
[BreezeQueryable]
public IQueryable<Client> Clients(bool IsEbasys = false)
{
    if (IsEbasys)
    {
        List<Client> lst = new List<Client>();
        lst.Add(new Client() {  FirstName = "Sam", LastName = "Smyth" });
        return lst.ToList().AsQueryable<Client>();
    }
    else
    {
        return _contextProvider.Context.Clients;
    }
}

来自http://www.breezejs.com/documentation/web-api-controller

BreezeQueryableAttribute

Breeze客户端通过向格式化为OData查询URL的控制器发送HTTP GET请求来查询数据。例如,客户端可以使用此URL查询按创建日期排序的活动(非归档)待办事项。

1 ... / breeze / todos / Todos?$ filter = IsArchived eq false&amp; $ orderby = CreatedAt 使用Breeze [Queryable]属性[1],Breeze可以扩展控制器的Todos操作方法返回的IQueryable(参见上面的代码示例)。净效果是LINQ查询,例如:

1 2 query = _contextProvider.Context.Todos            .Where(t =&gt; t.IsArchived == false).OrderBy(“CreatedAt”); 修改了IQueryable后,Breeze可以执行它,调用查询的LINQ提供程序(本例中为Entity Framework提供程序)。