powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web API oData NavigationProperty равен null
25 сообщений из 33, страница 1 из 2
Web API oData NavigationProperty равен null
    #39010696
Gul-79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день господа!

Пытаюсь разобраться с WebApi oData.

Сделал маленький проект веб-сервис WebApi oData и клиент WPF MVVM. Возникла следующая проблема, не передаются на клиент связанные сущности, данные с веб-сервиса приходят, но без свойств навигации.

Подскажите в какую сторону копнуть, где поправить?
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39010758
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По этому рецепту делал? :) http://codearticles.ru/articles/2525

P.S. См. Include, чтобы транслировался $expand.

context.Products.Include(p => p.Category)
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39010761
Gul-79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В том числе и этим проектом руководствовался :)

Пробовал я раньше жадную загрузку, не помогает в моей ситуации.

Если тебя не затруднить глянь проект, может я пропустил что-то, твой код отлично работает в отличие от моего, разницу я не вижу.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39010785
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоcontext.Products.Include(p => p.Category)

товагищи, юзайте проекции и пребудет счастие!
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39010812
Gul-79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущкоcontext.Products.Include(p => p.Category)

товагищи, юзайте проекции и пребудет счастие!

Приведи пример пожалуйста, что за проекция и как ее юзать
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011213
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gul-79Если тебя не затруднить глянь проект, может я пропустил что-то, твой код отлично работает в отличие от моего, разницу я не вижу.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[EnableQuery]
public IHttpActionResult GetProducts(ODataQueryOptions<Product> queryOptions)
{
    try
    {
        queryOptions.Validate(ValidationSettings);
        return Ok(Context.Products);
    }
    catch (ODataException ex)
    {
        return BadRequest(ex.Message);
    }
}



hVosttтовагищи, юзайте проекции и пребудет счастие!
Ты что несёшь?
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011223
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только не забыть экспанд в проксе.

Код: c#
1.
2.
3.
4.
5.
public async Task LoadProducts()
{
    var items = await Context.Products.Expand(p => p.Category).ExecuteAsync();
    _products.Load(items);
}
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011263
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоТы что несёшь?

проекции юзай! проекции. что непонятного?
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011264
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоТолько не забыть экспанд в проксе.

Код: c#
1.
2.
3.
4.
5.
public async Task LoadProducts()
{
    var items = await Context.Products.Expand(p => p.Category).ExecuteAsync();
    _products.Load(items);
}



Только не забыть подпереть костылём... ага, ага, щайчас! бягу!
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011330
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gul-79Приведи пример пожалуйста, что за проекция и как ее юзать

http://thedatafarm.com/data-access/use-projections-and-a-repository-to-fake-a-filtered-eager-load/

Жадная загрузка, которую предлагает МСУ, явно не от большого ума, не даёт ни возможности отфильтровать вложенные данные (допустим, исключить все удалённые, или не доступные пользователю, или ещё по миллиону причин-признаков), отдаёт всё гумно из базы что есть (это могут быть сотни тысяч строк), да и просто банальное нежелание работать мо̀̀згом
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011392
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущкоТы что несёшь?
проекции юзай! проекции. что непонятного?
Зачем это в odata? Клиент может запросить только то, что нужно.
/odata/Products?$expand=Category&$select=Id,Name,Category/Id

hVosttТолько не забыть подпереть костылём... ага, ага, щайчас! бягу!
Ты о чем? Это джойн, такой же как и в EF. Этот джойн транслируется в $expand, на стороне odata слубжы формируется соответствующий IQueryable и скармливается EF. EF транслирует это в соответствующий запрос на SQL с нужными полями, джойном, фильтрами и так далее..

hVostt http://thedatafarm.com/data-access/use-projections-and-a-repository-to-fake-a-filtered-eager-load/
А причем тут OData? OData тебе и так представляет готовую инфраструктуру для формирования требуемых с клиента Query. Выбрось это и не позорься.

hVosttЖадная загрузка, которую предлагает МСУ, явно не от большого ума, не даёт ни возможности отфильтровать вложенные данные (допустим, исключить все удалённые, или не доступные пользователю, или ещё по миллиону причин-признаков), отдаёт всё гумно из базы что есть (это могут быть сотни тысяч строк), да и просто банальное нежелание работать мо̀̀згом
Ты идиот?

Где тут ленивая зарузка? Более того, сам OData сервис из базы выберет именно эти данные, т.к. запрос транслируется в правильный SQL.

Код: c#
1.
2.
3.
4.
5.
6.
var items = await Context.Products
    .Expand(x => x.Category)
    .Select(x => new { x.Id, x.Name })
    .Where(x => x.Name.Contains("хвост нещадно тупит"))
    .Take(3)
    .ExecuteAsync();



P.S. Еще раз прочитай, что предлагается. Предлагается - включить EnableQuery директиву, которая позволит формировать с клиента запросы.

P.S. У автора тестовый проект, он тренируется работать с OData. Хочет выбрать все продукты, пусть выбирает. Но это не значит, что используется жадная загрузка. Загрузка используется такая, которую хочет клиент. Загрузку можно ограничивать с сервера средствами OData по определенным условиям.

P.S. Ты недавно сам писал, что правильнее всего оперировать готовыми объектами на стороне клиента. Проще вытянуть готовый объект и скормить его бизнесу. Теперь ты говоришь обратное и противоречишь сам себе. Как понимать?
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011397
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, и самого главного я не понимаю, как твой "совет" поможет автору? У него на стороне сервера не была подключена директива EnableQuery.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011657
Gul-79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мсущкона стороне сервера не была подключена директива EnableQuery.

Спасибо за помощь, после указания атрибута все заработало.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011806
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоТы о чем? Это джойн, такой же как и в EF. Этот джойн транслируется в $expand, на стороне odata слубжы формируется соответствующий IQueryable и скармливается EF. EF транслирует это в соответствующий запрос на SQL с нужными полями, джойном, фильтрами и так далее..

Я о том, что ты по ходу тупо не понимаешь разницу между способом хранения данных (слой доступа к данным) и бизнес-данными. Конечно, выглядит удобно скормить в OData контекст EF и успокоиться на этом. При этом клиент получает практически прямой доступ к БД. Примерно, как дать клиенту прямой доступ к БД, только через сервис OData.

Транслируется, джойны, фильтры... Что за бред ты несёшь.

Через OData клиенту предоставляется доступ к тем данным, которые нужны клиенту, а не то, что и как оно у тебя в БД хранится. Ты ему бизнес отдаёшь, а не тупо трачишь БД. Это дополнительный, управляемый и полностью контролируемый слой, с безопасностью, защитой от дурака, преобразованием данных и прочим.

Я не понимаю, при чём тут твоя трансляция SQL в OData? Новый вид тупого задроства? Ну тогда выкинь нафиг свой SQL и EF и отдай ему интерфейс RavenDb. Всё тож самое, JSON, запросы, фильтры, всё типа высокоуровнево
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011807
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоА причем тут OData? OData тебе и так представляет готовую инфраструктуру для формирования требуемых с клиента Query. Выбрось это и не позорься.

OData это интерфейс. А ты как школьник лишь увидел майкросовтовское позёрство, типа скормили EF в OData и уряяяя!! открываем шампусик, бухаем, задача ришена!

Вот уж точно, не позорился бы.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011808
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоP.S. У автора тестовый проект, он тренируется работать с OData. Хочет выбрать все продукты, пусть выбирает. Но это не значит, что используется жадная загрузка. Загрузка используется такая, которую хочет клиент. Загрузку можно ограничивать с сервера средствами OData по определенным условиям.

И ты старательно впихиваешь свою граблю человеку?
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011809
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоP.S. Ты недавно сам писал, что правильнее всего оперировать готовыми объектами на стороне клиента. Проще вытянуть готовый объект и скормить его бизнесу. Теперь ты говоришь обратное и противоречишь сам себе. Как понимать?

Под объектом я понимаю бизнес-объект. А не сущность в БД. В БД мой объект может быть разложен по 10-ку и больше таблиц, а клиенту нафиг это надо знать вообще, как у меня устроена БД? Либо это ооооочень примитивное приложение, либо ты чего-то недоговариваешь.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011842
Gul-79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Под объектом я понимаю бизнес-объект. А не сущность в БД. В БД мой объект может быть разложен по 10-ку и больше таблиц, а клиенту нафиг это надо знать вообще, как у меня устроена БД

Поправь меня ели я ошибаюсь, ты предлагаешь сделать на подобие этого ?
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011851
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gul-79Под объектом я понимаю бизнес-объект. А не сущность в БД. В БД мой объект может быть разложен по 10-ку и больше таблиц, а клиенту нафиг это надо знать вообще, как у меня устроена БД

Поправь меня ели я ошибаюсь, ты предлагаешь сделать на подобие этого ?

3. Domain Driven Design (*slated for release v4.0.0)

то, о чём я говорю ещё не готово. реализован только слой доступа к данным через паттерн Репозитрий.

ну а если этот слой напрямую прокинут в Kendo UI / Angular JS, мы получаем ковырялку данных с логикой в контроллерах. и не надо себя тешить надеждой, что если код из контроллера просто тупо вынесен в какие-то классы, чтоб "облегчить" контроллеры, который делает всё тоже самое -- жуёт Entities, и отдаёт наружу как есть, это нифига не бизнес, а лапша на постном масле.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011933
мсущко1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttЯ о том, что ты по ходу тупо не понимаешь разницу между способом хранения данных (слой доступа к данным) и бизнес-данными. Конечно, выглядит удобно скормить в OData контекст EF и успокоиться на этом. При этом клиент получает практически прямой доступ к БД. Примерно, как дать клиенту прямой доступ к БД, только через сервис OData.
OData не обязана работать с базой. В OData используется модель. Откуда будут браться данные - не важно. Никакой прямого доступа у клиента нет, можно использовать ролевую модель и на основании её выдавать из контроллеров только ту информацию, которая доступна пользователю. Не неси чепухи, причем тут база?

hVosttТранслируется, джойны, фильтры... Что за бред ты несёшь.
Что не понятно по трансляции? Незнакомое слово?

hVosttЧерез OData клиенту предоставляется доступ к тем данным, которые нужны клиенту, а не то, что и как оно у тебя в БД хранится. Ты ему бизнес отдаёшь, а не тупо трачишь БД. Это дополнительный, управляемый и полностью контролируемый слой, с безопасностью, защитой от дурака, преобразованием данных и прочим.
Причем тут БД? Это у ТС модель 1 к 1 натравлена на БД в качестве примера. Какая безопасность? Тут рассматривается учебная демка из рецепта.

hVosttЯ не понимаю, при чём тут твоя трансляция SQL в OData? Новый вид тупого задроства? Ну тогда выкинь нафиг свой SQL и EF и отдай ему интерфейс RavenDb. Всё тож самое, JSON, запросы, фильтры, всё типа высокоуровнево
Это у автора SQL, а в OData IQueryable. Ты на стороне сервера можешь вот что угодно транслировать IQueryable.

hVosttмсущкоА причем тут OData? OData тебе и так представляет готовую инфраструктуру для формирования требуемых с клиента Query. Выбрось это и не позорься.

OData это интерфейс. А ты как школьник лишь увидел майкросовтовское позёрство, типа скормили EF в OData и уряяяя!! открываем шампусик, бухаем, задача ришена!

Вот уж точно, не позорился бы.
Какой-то эпический бред неофита, даже комментировать нечего.

hVosttмсущкоP.S. Ты недавно сам писал, что правильнее всего оперировать готовыми объектами на стороне клиента. Проще вытянуть готовый объект и скормить его бизнесу. Теперь ты говоришь обратное и противоречишь сам себе. Как понимать?

Под объектом я понимаю бизнес-объект. А не сущность в БД. В БД мой объект может быть разложен по 10-ку и больше таблиц, а клиенту нафиг это надо знать вообще, как у меня устроена БД? Либо это ооооочень примитивное приложение, либо ты чего-то недоговариваешь.
А кто запрещает в OData отдавать бизнес объект? Чем "Категория товара", список которых хочет получить ТС, не является бизнес объектом?

P.S. Хвост, ты и сам знаешь, что ляпнул чуть и облажался, и тебя понесло вообще куда-то в лес. Прекращай писать глупости и возьмись уже за голову.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39011935
мсущко1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S. Новая ветвь эпического кретинизма Сержа, он наплакался Джуджу, чтобы в форуме забанили гуестов. Браво!
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39012039
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущко1OData не обязана работать с базой. В OData используется модель. Откуда будут браться данные - не важно. Никакой прямого доступа у клиента нет, можно использовать ролевую модель и на основании её выдавать из контроллеров только ту информацию, которая доступна пользователю. Не неси чепухи, причем тут база?

Я не выходил из контекста обсуждения, выше ты давал рецепты применительно к EF и базе данных. А теперь тя понесло во все стороны. Можно-нельзя. Не покидай контекст обсуждения

мсущко1Причем тут БД? Это у ТС модель 1 к 1 натравлена на БД в качестве примера. Какая безопасность? Тут рассматривается учебная демка из рецепта.

Не увиливай. "Учебный" это не оправдание говнокоду. Тем более, когда раздаешь советы. Ты дал совет применительно к БД, вот при чём. Или старость не радость, с памятью совсем плохо?

мсущко1Какой-то эпический бред неофита, даже комментировать нечего.

Я так и понел, что тебе нечего сказать

мсущко1А кто запрещает в OData отдавать бизнес объект?

Никто не запрещает, вот именно. Так какого ж фига? Я-то в курсе, что ты просто тащишься с возможности тарчинга контекста базы данных через OData, аж пищишь ))) Так что отмазоны твое не катют!

мсущко1Чем "Категория товара", список которых хочет получить ТС, не является бизнес объектом?

Очень плохо, что ты разницы не понимаешь. Студенту вполне простительно, но ты чо? Как тя угораздило?

мсущко1P.S. Хвост, ты и сам знаешь, что ляпнул чуть и облажался, и тебя понесло вообще куда-то в лес. Прекращай писать глупости и возьмись уже за голову.

Ненене, я с предмета обсуждения не съезжал. Упрямо придерживаюсь контекста! А вот тя шатает, как пьяного бедолагу
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39012044
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущко1P.S. Новая ветвь эпического кретинизма Сержа, он наплакался Джуджу, чтобы в форуме забанили гуестов. Браво!

Блин и правдо... анонимусу больше писать сюда нельзя. Грустно, ответа так и не получу

Верните МСУ, хватит вредничать!
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39012092
мсущко3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttЯ не выходил из контекста обсуждения, выше ты давал рецепты применительно к EF и базе данных. А теперь тя понесло во все стороны. Можно-нельзя. Не покидай контекст обсуждения
А чем тебе для рецепта не устроила EF модель? Меня никуда не несло в отличие от тебя.

hVosttНе увиливай. "Учебный" это не оправдание говнокоду. Тем более, когда раздаешь советы. Ты дал совет применительно к БД, вот при чём. Или старость не радость, с памятью совсем плохо?
А какой ты предлагаешь писать "негавнокод" в рецептах с Products и Categories? Да пусть даже Products и Categories пойдут в продуктив, какие проблемы пихнуть эти справочники общую odata модель? У тебя параноя?

hVosttНикто не запрещает, вот именно. Так какого ж фига? Я-то в курсе, что ты просто тащишься с возможности тарчинга контекста базы данных через OData, аж пищишь ))) Так что отмазоны твое не катют!
Так рецепт такой, вот такого и фига. Есть более сложные рецепты http://codearticles.ru/articles/2486 в который я сам пишу свой транслятор и разбираю Query, чтобы обратиться к сторонней системе (у меня в боевом сервисе это Аксапте), сформировать X++ запрос, получить данные в терминах Аксапты, перемапить их в предметную область и нормальные классы OData сервиса, и отдать клиенту. Но зачем ТС'у начинать изучать технологию с таких сложных кейсов? Какие у меня "отмазоны"? Странный ты.

hVosttмсущко1Чем "Категория товара", список которых хочет получить ТС, не является бизнес объектом?
Очень плохо, что ты разницы не понимаешь. Студенту вполне простительно, но ты чо? Как тя угораздило?
Ну будет у меня композитный объект MyDomainType, который будет оперировать справочниками Products и Categories. В чем проблема-то?

hVosttНенене, я с предмета обсуждения не съезжал. Упрямо придерживаюсь контекста! А вот тя шатает, как пьяного бедолагу
Ты просто облажался и ляпнул не в тему. Теперь расхлебываешь.
...
Рейтинг: 0 / 0
Web API oData NavigationProperty равен null
    #39012101
мсущко3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttмсущко1P.S. Новая ветвь эпического кретинизма Сержа, он наплакался Джуджу, чтобы в форуме забанили гуестов. Браво!

Блин и правдо... анонимусу больше писать сюда нельзя. Грустно, ответа так и не получу

Верните МСУ, хватит вредничать!
Пилять, допустили параноика модерировать... Понту с такого модератора на профоруме? Кнопки бана жать? Ну круто, так можно и блондинку с форума "Учимся готовить" посадить...
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Web API oData NavigationProperty равен null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]