2014-10-16 34 views
0

我創建了一個新的MVC4 web api項目來通過HTTP公開實體。因爲我想查詢對數據庫中執行,而不是在內存中我啓用了查詢支持WebAPI + IQueryable中的System.ArgumentOutOfRangeException

public static void Register(HttpConfiguration config) 
{ 
    config.EnableQuerySupport(); 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
} 

這裏是我的IQueryable。我正在使用Repository模式來使用NHibernate檢索數據。

public class TradeViewController : ApiController 
{ 
    public IQueryable<TradeView> Get() 
    { 
     return new TradeViewRepository().GetQueryable(); 
    } 
} 

當我嘗試測試控制器我得到以下異常

System.ArgumentOutOfRangeException:索引超出範圍。必須是非負數且小於集合的大小。 參數名:指數

這裏是我的測試

public void Get() 
{ 
    TradeViewController controller = new TradeViewController(); 

    // Act 
    var result = controller.Get(); 
    var count = result.Take<TradeView>(10).Count(); 

    Assert.AreEqual(10, count); 
} 

而且一般情況是有可能使用LINQ查詢針對的WebAPI控制器?

感謝

+0

什麼'索引'是指的錯誤?你確定這個版本庫沒有問題嗎? – cDima 2014-10-16 20:09:37

+0

你確定你實際上有10條記錄嗎? – 2014-10-16 20:10:54

+0

是知識庫返回記錄正確,並且表中有超過一百萬條記錄,所以這應該不成問題。 – Parvez 2014-10-16 20:15:01

回答

0

如果我記得這個正確的,在網絡API的OData的管道確實有時會產生疑問,並希望這東西NHibernate的不允許,甚至NHibernate的LINQ提供程序不支持/理解。

所以才使查詢支持是不夠的,讓您的NHibernate驅動的API控制器的工作...

也許這的NuGet可以幫助你得到你的東西跑: https://github.com/pvginkel/NHibernate.OData

或嘗試谷歌的一些博客,你會發現至少有一些談論... 否則,如果這是太多,只需使用實體框架...整個asp.net odata實現完成和實體框架;)

相關問題