2014-10-16 8 views
0

Я создал новый веб-проект MVC4 для создания объектов через HTTP. Так как я хотел запрос будет выполняться с базой данных, а не в памяти я включил поддержку запросаSystem.ArgumentOutOfRangeException в WebAPI + IQueryable

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

вот мой IQueryable. Я использую шаблон репозитория для извлечения данных с помощью 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

Что означает 'index'? Вы уверены, что хранилище работает без проблем? – cDima

+0

У вас действительно есть 10 записей для 'Take'? –

+0

Да Репозиторий прекрасно сохраняет записи, и в таблице содержится более миллиона записей, поэтому это не должно быть проблемой. – Parvez

ответ

0

Если я помню это правильно, трубопровод OData в Web Api иногда не создавать запросы и ожидает, что вещи, которые NHibernate не позволяет или даже провайдер NHibernate Linq не поддерживает/понять.

Так что позволяет поддержку запроса не достаточно, чтобы получить NHibernate управляемый контроллер API работает ...

Может быть, это NuGet поможет вам получить всполошились: https://github.com/pvginkel/NHibernate.OData

Или попробовать Google для некоторых блоги, вы найдете хотя бы некоторые разговоры об этом ... В противном случае, если это слишком много, просто используйте инфраструктуру сущности ... Вся реализация asp.net odata выполняется для и с картой сущностей;)

Смежные вопросы