【问题标题】:Breeze expand error微风展开错误
【发布时间】:2013-11-27 05:55:19
【问题描述】:

不确定这是否可以使用 Breeze,但我们遇到需要从 2 个不同来源返回 IQueryable 的情况。

我们从控制器操作调用的业务逻辑检查是否有一些数据存储在数据库中,如果是,则从使用EFContextProvider 的存储库返回IQueryable

否则,将创建包含默认数据的List<T>,并将其转换为IQueryable,然后返回。

在客户端,我们的查询包含 .expand 以确保使用所需数据填充导航属性。

IQueryable 来自 EF 时,这工作正常,但在创建 List<T> 时崩溃并出现以下错误:

{"$id":"1","$type":"System.Web.Http.HttpError, System.Web.Http","Message":"An error has occurred.","ExceptionMessage":"'System.Linq.EnumerableQuery<MyObject>' does not contain a definition for 'Include'","ExceptionType":"Microsoft.CSharp.RuntimeBinder.RuntimeBinderException","StackTrace":"   at CallSite.Target(Closure , CallSite , Object , String )\r\n   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)\r\n   at Breeze.WebApi.QueryHelper.<>c__DisplayClass14.<ApplyExpand>b__11(String expand)\r\n   at System.Collections.Generic.List`1.ForEach(Action`1 action)\r\n   at Breeze.WebApi.QueryHelper.ApplyExpand(IQueryable queryable, String expandsQueryString)\r\n   at Breeze.WebApi.QueryHelper.ApplySelectAndExpand(IQueryable queryable, NameValueCollection map)\r\n   at Breeze.WebApi.BreezeQueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception)\r\n   at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response)\r\n   at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t)\r\n   at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)"}

这是 Breeze 的问题(我们目前使用的是 1.4.2),还是我做错了什么?

【问题讨论】:

  • 服务器端方法是什么样的?
  • 一切都推迟到我们的业务逻辑层,但控制器看起来像:[HttpGet] public IQueryable&lt;XXX&gt; Customers(string id) { return logic.Get(id); }

标签: breeze


【解决方案1】:

我认为在这种情况下,您最好的选择是从客户端删除“扩展”并将其移动到服务器(作为包含)。像这样的:

[HttpGet]
public IQueryable<Customer> Customers(someCriteria) {
  if (... haveData ...) {
      return ContextProvider.Context.Customers.Include("Orders");
  } else {
      return DefaultCustomerList.AsQueryable()
  }
}

【讨论】:

  • 我认为可能是这种情况,但只是想知道我是否遗漏了一些明显的东西。明天试试。
  • 将扩展移动到服务器解决了我的直接问题。使用 Breeze 的 WebApi2 版本进行了一些测试,从客户端使用该版本似乎可以正常工作,但我们目前无法升级到该版本。
猜你喜欢
  • 2013-05-17
  • 2013-08-04
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多