Как стать автором
Обновить

Комментарии 14

Статья хорошая.
Я месяца 3 использую WebAPI OData + Kendo UI, пользоваться очень удобно. Но к сожалению пока не хватает параметров $expand и $select.
Тема вообще интересная, но мне кажется мало кто использует Kendo UI у нас.
В Roadmap заявлена скорая реализация параметров $expand и $select. Данный вопрос в «топ»-е по голосованию.
А на счет Kendo UI, мне понравилась документация и сильное всообщество.
Если мне не изменяет память, то уже даже в nightly builds у них готова реализация $expand и $select.
Совершенно не обязательно использовать EF, просто необходимо реализовать нужные методы класса EntitySetController. В идеале, данные нужно получать из репозитория через внедрение зависимости.
И даже NHibernate можно использовать?
Запрос из URL транслируется в дерево выражений LINK, которое выполняется на IQueryable (в данном случае возвращает метод public override IQueryable<ProductDTO> Get()). Я согласен, что много ORM не поддерживают Link провайдер и его очень сложно реализовать. Рекомендую почитать блог о переводе OData запросов в HQL. есть еще открытый проект OData парсер для NHibernate, но я его не тестировал.
UI самописный или какой-то ui-фреймворк/компоненты использовали?
Использовал Kendo UI Web.
Писал похожую статью, но делал чуть не так. Скажите, а в вашем варианте возвращается параметр total, пагинация работает нормально?
Читал Вашу статью. Вы использовали ApiController, здесь же EntitySetController, в котором уже реализован параметр $inlinecount. При запросе GET /odata/Products?%24inlinecount=allpages мы получим такой результат:
{
  "odata.metadata":"http://localhost:52864/odata/$metadata#Products","odata.count":"4","value":[
    {
      "ProductID":1,"Name":"Product1","Price":"1.00","CategoryID":1,"CategoryName":"Categoty1"
    },{
      "ProductID":2,"Name":"Product2","Price":"2.00","CategoryID":1,"CategoryName":"Categoty1"
    },{
      "ProductID":3,"Name":"Product3","Price":"2.00","CategoryID":2,"CategoryName":"Category2"
    },{
      "ProductID":4,"Name":"dfgdf","Price":"0.00","CategoryID":1,"CategoryName":"Categoty1"
    }
  ]
}

"odata.count":"4" — это и есть total.
Если мне не изменяет память, то OData была с самого появления WebAPI.
Можно уточнить, что именно добавилось с Web Tools 2012.2 Update?
Обновление расширило реализацию протоколо OData. Во-первых стало проще использовать: переопределение базовых методов, определение ключа сущности, реализовали больше параметров oData запросов. И еще то, что я планирую описать в следующих статьях:
— поддежка OData связей сущностей типа entity/$links/entity;
— реализованы OData Actions. Терерь можно вызывать различные методы типа: odata/Products(1)/RateProduct;
— если не ошибаюсь, реализовано OData $metadata, например запрос /odata/$metadata#Products/@Element даст ответ:
<edmx:Edmx xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" Version="1.0">
<edmx:DataServices xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0">
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="ODataSample.Models">
<EntityType Name="ProductDTO">
<Key>
<PropertyRef Name="ProductID"/>
</Key>
<Property Name="ProductID" Type="Edm.Int32" Nullable="false"/>
<Property Name="Name" Type="Edm.String" Nullable="false"/>
<Property Name="Price" Type="Edm.Decimal" Nullable="false"/>
<Property Name="CategoryID" Type="Edm.Int32" Nullable="false"/>
<Property Name="CategoryName" Type="Edm.String"/>
</EntityType>
<EntityType Name="Category">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Int32" Nullable="false"/>
<Property Name="Name" Type="Edm.String" Nullable="false"/>
</EntityType>
</Schema>
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="Default">
<EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
<EntitySet Name="Products" EntityType="ODataSample.Models.ProductDTO"/>
<EntitySet Name="Categories" EntityType="ODataSample.Models.Category"/>
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
Теперь в бесплатную версию Kendo UI не входит grid. Кто нибудь знает похожий бесплатный аналог?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации