不知道這是否可以使用Breeze,但我們有一種情況,我們需要從2個不同的來源返回IQueryable
。Breeze擴展錯誤
我們的控制器操作調用的業務邏輯檢查數據是否存儲在數據庫中,如果存在,則從使用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)"}
這是微風的問題(我們使用的是1.4.2目前),還是我做錯了什麼?
服務器端方法是什麼樣的? –
一切都推遲到我們的業務邏輯層,但控制器看起來像:[HttpGet] public IQueryable Customers(string id){ return logic.Get(id); }' –
llihp