Breeze 微风膨胀特性

Breeze 微风膨胀特性,breeze,Breeze,当我尝试在任何导航属性上使用Expand时,会出现以下异常 $id: "1", $type: "System.Web.Http.HttpError, System.Web.Http", Message: "An error has occurred.", ExceptionMessage: "'object' does not contain a definition for 'Include'", ExceptionType: "Microsoft.CS

当我尝试在任何导航属性上使用Expand时,会出现以下异常

    $id: "1",
    $type: "System.Web.Http.HttpError, System.Web.Http",
    Message: "An error has occurred.",
    ExceptionMessage: "'object' does not contain a definition for 'Include'",
    ExceptionType: "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException",
    StackTrace: " at System.Web.Http.ApiController.<InvokeActionWithExceptionFilters>d__b.MoveNext() --- End of stack trace from previous  location where exception was thrown --- at  System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
这是模型

[Table("CallOutcomes")]
public class CallOutcome {
    [Key]
    public int Id { get; set; }

    [Required]
    public string Description { get; set; }
    public bool IsInternal { get; set; }


    public int CallOutcomeActionId { get; set; }

    [ForeignKey("CallOutcomeActionId")]
    [InverseProperty("CallOutcomes")]
    public CallOutcomeAction CallOutcomeAction { get; set; }
    public ICollection<CallOutcomeHistory> CallOutcomeHistories { get; set; }
}
预备赛 您确定可以查询
MaxsysController.Callout
端点而不展开吗

您确定
Repository.callout
返回了正确的EF混凝土类型吗

您在控制器的
CallOutcomes()
中尝试了如下操作:

[HttpGet] 公共IQueryable() { var foo=Repository.callout//break here;稍后删除。 .Include('callocomeaction').ToList(); 返回Repository.callout; } 在中断时,您已确认方法成功,但没有失败,
foo
具有值

下一个 一旦您确认了这些要点,我想我的下一步将是删除
[RequireHTTPS]
。我最近没有试过,要在我这一方面很快建立起来并不容易。有可能我们搞砸了,
[RequireHTTPS]
属性和
[BreezeController]
属性之间存在干扰


还可以尝试将
[RequireHTTPS]
放在
[BreezeController]
之前。这不要紧;我现在只是在猜测。我将等待您的报告,然后我们可以从那里继续。

问题已经解决。安装了一些预发布软件来测试Web API中的CORS支持。一旦我删除了这些更改,expand就可以工作了。感谢您的帮助。

我也遇到过这个问题,并一直追踪到BreezeQueryable注释的应用

例外情况:

ExceptionMessage:“'System.Linq.EnumerableQuery'不包含'Include'的定义

终点:

[HttpGet]
[BreezeQueryable(PageSize = 1000)] //1000 row limit
public IQueryable<Postcode> Postcodes()
{
    return _db.Context.Postcodes;
}
要修复此问题,只需删除[BreezeQueryable]注释:

[HttpGet]
//[BreezeQueryable(PageSize = 1000)] //1000 row limit
public IQueryable<Postcode> Postcodes()
{
    return _db.Context.Postcodes;
}
[HttpGet]
//[BreezeQueryable(PageSize=1000)]//1000行限制
公共可查询邮政编码()
{
返回_db.Context.Postcodes;
}
编辑-显然这不是“固定的”。
Breeze WebApi程序集中似乎存在问题。

当我尝试使用操作上的BreezeQueryableAttribute限制操作返回的页面大小时,我开始遇到此问题。如果没有该属性,该操作将返回预期的数据。像gopheruk一样,我相信现在有一种虫子在微风中

库版本:

http://localhost/breeze/Data/MyObjects?$filter=Id%20eq%201&$expand=User
[BreezeController]
public class DataController : ApiController
{

    //...

    [HttpGet]
    [BreezeQueryable(PageSize = 30)] //if this line is commented out, everything works
    public IQueryable<MyObject> MyObjects()
    {
        return _myObjectRepository.All(User.Identity);
    }

}
{"$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)"}
我没有使用任何预发布的库,nuget中的所有内容都是最新的

  • Breeze 1.4.2(Breeze.WebApi 1.4.0.0,Breeze.WebApi.EF 1.4.0.0)
  • Microsoft.AspNet.WebApi 4.0.30506
  • EntityFramework 5.0.0
请求:

http://localhost/breeze/Data/MyObjects?$filter=Id%20eq%201&$expand=User
[BreezeController]
public class DataController : ApiController
{

    //...

    [HttpGet]
    [BreezeQueryable(PageSize = 30)] //if this line is commented out, everything works
    public IQueryable<MyObject> MyObjects()
    {
        return _myObjectRepository.All(User.Identity);
    }

}
{"$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)"}
在服务器上:

http://localhost/breeze/Data/MyObjects?$filter=Id%20eq%201&$expand=User
[BreezeController]
public class DataController : ApiController
{

    //...

    [HttpGet]
    [BreezeQueryable(PageSize = 30)] //if this line is commented out, everything works
    public IQueryable<MyObject> MyObjects()
    {
        return _myObjectRepository.All(User.Identity);
    }

}
{"$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)"}
[BreezeController]
公共类数据控制器:ApiController
{
//...
[HttpGet]
[BreezeQueryable(PageSize=30)]//如果这一行被注释掉,一切正常
公共可查询MyObjects()
{
返回_myObjectRepository.All(User.Identity);
}
}
响应:

http://localhost/breeze/Data/MyObjects?$filter=Id%20eq%201&$expand=User
[BreezeController]
public class DataController : ApiController
{

    //...

    [HttpGet]
    [BreezeQueryable(PageSize = 30)] //if this line is commented out, everything works
    public IQueryable<MyObject> MyObjects()
    {
        return _myObjectRepository.All(User.Identity);
    }

}
{"$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)"}
{“$id”:“1”,“$type”:“System.Web.Http.HttpError,System.Web.Http”,“Message”:“发生错误”,“ExceptionMessage”:“System.Linq.EnumerableQuery”不包含“Include”的定义,“ExceptionType”:“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”,“StackTrace”:“位于CallSite.Target(闭包、调用站点、对象、字符串)\r\n在System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site,T0 arg0,T1 arg1)\r\n在Breeze.WebApi.QueryHelper.c\u DisplayClass14.b\u 11(字符串展开)\r\n在System.Collections.Generic.List`1.ForEach(Action`1 Action)\r\n在Breeze.WebApi.QueryHelper.ApplyExpand(可检索的可查询字符串,字符串可展开)\r\n位于Breeze.WebApi.QueryHelper.ApplySelectAndExpand(IQueryable queryable,NameValueCollection map)\r\n位于Breeze.WebApi.BreezeQueryableAttribute.OnActionExecuted(HttpActionExecutedContext actionExecutedContext)\r\n位于System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext,HttpResponseMessage response,Exception Exception)\r\n位于System.Web.Http.Filters.ActionFilterAttribute.c_uuDisplayClass2.b_u0(HttpResponseMessage response)\r\n位于System.Threading.Tasks.TaskHelperExtensions.c_uDisplayClass41`2.b_u40(Task`1 t)\r\n位于System.Threading.TaskHelperExtensions.TheImpl[TTask,TOuterResult](TTask任务,Func`2 continuation,CancellationToken CancellationToken,Boolean runSynchronously)}

您的控制器方法是什么样子的?感谢您的回复。1.是的,端点在没有展开的情况下可以工作。2.Repository.CallOutcomes确实返回正确的具体类型。3.我在控制器中添加了include,这确实可以,但我想从客户端调用expand。4.我删除了RequireHTTPS属性,但仍然获得相同的pr问题。我还删除了存储库,并在控制器中创建了一个EFContextProvider对象……您让我挂起了。这有效吗?无论哪种方式,我们都有谜团要解决。但如果没有,我怀疑Web API中的操作处理程序受到了干扰。错误发生在ApplyExpand方法中的BreezeQueryableAttribute.cs中。我将此方法的parm值放在上面。它在引用include的Foreach处崩溃。如果我运行Breeze.Learn sample from GITHUB并升级到最新版本的Breeze和access,如果我添加[BreezeController],我会遇到类似的错误属性为NorthwindController。阅读此帖子的人请注意:@nmushov发现了原因,原因是预发布Web API。请参见上面的答案。嗯。我很高兴您找到了它。但我不高兴看到有什么东西威胁到Breeze.net的行为。请您通过确定预发布的Web API来补充您的答案你尝试过的软件。我至少可以考虑为将来的软件做准备。当然,我有微电脑。