2013-07-01 45 views
4

我已经发布了WebAPI服务,它返回一个项目列表。我正在实施Breeze,并已经设法基本上使用过滤/排序。但是,展开不起作用。微风扩展不能使用WebAPI与EF

http://www.ftter.com/desktopmodules/framework/api/dare/dares?$expand=ToUser

可以看到ToUserId ForeignKey的在上面的响应,但TOUSER性质是NULL(用户肯定存在)

可以看到在元数据中的至用户EF导航属性。

当我使用。在服务器端包括我可以用EF填充它,但我不想这样做。

我查了微风教程2在这里展开:http://learn.breezejs.com/ 下面是它不扩大:http://learn.breezejs.com/api/northwind/Products

,并在这里它与展开(你可以看到另外一种类型的信息):http://learn.breezejs.com/api/northwind/Products?$expand=Category

这是什么,我试图做的,但我的不往里面...

UPDATE: 我下载了Breeze 1.3.6 Samples并装载在VS2011的DocCode解决方案。 我跑了,看到客户端扩展工作; 例如 http://localhost:47595/breeze/Northwind/Orders?$top=1(不扩展) http://localhost:47595/breeze/Northwind/Orders?$top=1&$expand=Customer(正确地扩展客户)。

我检查了WebAPI控制器代码,它看起来是一样的,除了他们使用EF Code First而不是Model First。外键饰有一个属性:

的作品

[ForeignKey("CustomerID")] 
[InverseProperty("Orders")] 
public Customer Customer {get; set;} 

这只是没有任何意义

微风样本...这是什么与我的WebAPI控制器或的EntityFramework关系.. 。

更新2 我下载了最基本的待办事项淘汰赛微风样品,并加入这行来的TodoItem类:public User ToUser { get; set; } 我就能够扩展网络API调用with http://localhost:63030/breeze/todos/Todos?$expand=ToUser

所以我得出的结论是,这与我使用EntityFramework DB First而不是Code First的事实有关。在Breeze和EF的WebAPI当前版本中,它确实似乎是可行的。

更新3 我已经把范围缩小到我的数据库,数据库EF第一,代码第一次的差异,但仍然没有确定的问题。我已经从一个模型改为一个代码优先的方法,结果完全相同(即没有展开)。

例如:如果您在Breeze网站上查看此扩展,http://learn.breezejs.com/api/northwind/Products?%24expand=Category,请尝试将最后一个参数更改为无效字段并引发错误,例如,: http://learn.breezejs.com/api/northwind/Products?%24expand=Category1

然而,在我的代码,它总是忽略这个PARAM并返回所有的记录,如果展开参数是不正确从未抛出异常: http://www.ftter.com/desktopmodules/framework/api/dare/dares?$expand=To4657657User

因此我难倒。我有不知道为什么这不起作用。

我的代码

[HttpGet] 
    [Queryable(AllowedQueryOptions = AllowedQueryOptions.All)] 
    public HttpResponseMessage Dares() 
    { 
     var response = Request.CreateResponse(HttpStatusCode.OK, (IQueryable<Dare>)contextProvider.Context.Dares); 
     return ControllerUtilities.GetResponseWithCorsHeader(response); 
    } 

,这里是从我的EF模型(使用数据库优先)

public partial class Dare 
{ 
    public int DareId { get; set; } 
    public int ToUserId { get; set; } 
    public virtual User ToUser { get; set; } 
} 

回答

0

我想我已经发现了这个问题 - 带有HttpResponseMessage返回类型的IQueryable行为与纯粹的IQueryable返回类型行为不一样。展开似乎工作时,我不包装它。

我在这里提出一个新的问题: How to use Breeze IQueryable with CORS?

1

您的网址似乎缺少$为扩大查询选项生成的类...应该是$expand

+0

$选择&$扩展支持最新的Beta预览版位的一部分发布几天就回来。仅供参考:http://www.asp.net/vnext –

+0

仅供参考:我已更新我的问题以修正$,并且还包含Breeze教程中的URL,其中展开工作。 – Rodney

+0

Re。测试版预览:我不明白这一点 - Breeze教程示例如何工作?你是说这是一个Web API问题(不是Breeze问题)?我正在努力理解哪里有技术开始,哪里结束。在此期间是否有任何解决方法... – Rodney