2014-03-29 40 views
0

好吧,在经过很多努力之后,我刚把我的项目从Breeze 1.2升级到1.4,EF 5.0升级到6.1,并且它正在运行。但是,我注意到,一些查询不再有效。在客户端,我得到的错误是这样的:从v1.2升级到1.4后,BreezeJS不能再扩展了吗?

GET ... /微风/微风/方法$过滤= ID%20当量%,201 & $扩大= CompoundSettings%2FCompound%2FTargetPeaks 400(错误请求)

据我所知,有人报告说微风不支持多对多的关系。但是,我的并不是多对多的。

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

如果展开不包含最后一个TargetPeaks,它将起作用。

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

+0

我有相同的版本:Breeze:1.4和EF:6.1。你会发布客户端代码与扩展? –

+0

与此同时,我将这些扩展移动到服务器使用包含没有任何问题的包含。我的项目再次运作。我用过的客户端代码如下所示:'var query = breeze.EntityQuery.from('Methods')。expand('CompoundSettings.Compound.TargetPeaks'); return manager.executeQuery(query).then(succeeded);' – newman

回答

2

我想你可能会遇到this SO post中描述的问题。

较早版本的EF和WebApi不支持$ expand,所以Breeze EF服务器代码使用它自己的$ expand实现。现在,在WebApi 2中,Breeze使用微软的实现,它使用微软的默认设置。

Queryable属性包含一个“MaxExpansionDepth”属性,以防止客户端能够做出太大的查询。我不确定默认设置是什么,但请尝试:

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

这是秘诀。而微风升级并没有对你这样做。 Web API 2升级了。 – Ward

+0

太好了。我只是测试了这个,它的工作原理。正如另一篇文章中提到的,您可以将此属性添加到方法级别或控制器级别。对我来说太糟糕了,因为与此同时,我将所有扩展转换为服务器端包含哪些运作良好。但很高兴知道这个问题的解决方案,我相信我会在稍后需要它。太感谢了! – newman

相关问题