【问题标题】:BreezeJS expand no more working after upgrade from v1.2 to 1.4?从 v1.2 升级到 1.4 后,BreezeJS 扩展不再工作?
【发布时间】:2014-03-29 13:39:41
【问题描述】:

好的,经过一番努力,我刚刚将我的项目从 Breeze 1.2 升级到 1.4,将 EF 5.0 升级到 6.1,并且它正在运行。但是,我注意到,一些查询不再起作用。在客户端,我收到这样的错误:

获取 .../breeze/breeze/Methods?$filter=Id%20eq%201&$expand=CompoundSettings%2FCompound%2FTargetPeaks 400(错误请求)

正如我所读到的,有些人报告说微风不支持多对多关系。但是,我的不是多对多。

在我的例子中,Methods 包含一个 CompoundSetting 的集合,它包含一个 Compound,它包含一个 TargetPeak 的集合。我也尝试删除虚拟关键字进行收藏,但似乎没有任何区别。

如果展开不包括最后一个 TargetPeaks,它可以工作。

有什么问题?嵌套层太多?请注意,相同的查询(甚至更多层)在 Breeze v1.2 中运行良好。

【问题讨论】:

  • 我有相同的版本: Breeze:1.4 和 EF: 6.1 。你会发布带有扩展的客户端代码吗?
  • 与此同时,我使用 include 将这些扩展移动到服务器,这没有任何问题。我的项目又开始工作了。我以前使用的客户端代码是这样的:var query = breeze.EntityQuery.from('Methods').expand('CompoundSettings.Compound.TargetPeaks'); return manager.executeQuery(query).then(succeeded);

标签: entity-framework breeze


【解决方案1】:

我认为您可能遇到了this SO post 中描述的问题。

旧版本的 EF 和 WebApi 不支持 $expand,因此 Breeze EF 服务器代码使用自己的 $expand 实现。现在,在 WebApi 2 中,Breeze 使用 Microsoft 的实现,它使用 Microsoft 的默认设置。

Queryable 属性包含一个“MaxExpansionDepth”属性,以防止客户端进行过大的查询。我不确定默认值是什么,但请尝试:

[BreezeQueryable(MaxExpansionDepth = 4)]
public IQueryable<Method> Methods()
{
    ...
}

【讨论】:

  • 这就是秘诀。而微风升级并没有对你这样做。 Web API 2 升级了。
  • 太棒了。我刚刚对此进行了测试,并且可以正常工作。如另一篇文章所述,您可以将此属性添加到方法级别或控制器级别。对我来说太糟糕了,因为在此期间,我将所有扩展都转换为服务器端包含哪些运行良好。但是很高兴知道这个问题的解决方案,我相信我以后会需要它。谢谢一百万!
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2018-09-16
  • 2016-01-03
  • 2011-09-24
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多