2013-07-01 49 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