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

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

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

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

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

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

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

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

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

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

Приведи пример пожалуйста, что за проекция и как ее юзать
...
Рейтинг: 0 / 0
20.07.2015, 12:37
    #39011213
мсущко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
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
20.07.2015, 12:43
    #39011223
мсущко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
Только не забыть экспанд в проксе.

Код: 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
20.07.2015, 13:05
    #39011263
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
мсущкоТы что несёшь?

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

Код: 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
20.07.2015, 13:39
    #39011330
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
Gul-79Приведи пример пожалуйста, что за проекция и как ее юзать

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

Жадная загрузка, которую предлагает МСУ, явно не от большого ума, не даёт ни возможности отфильтровать вложенные данные (допустим, исключить все удалённые, или не доступные пользователю, или ещё по миллиону причин-признаков), отдаёт всё гумно из базы что есть (это могут быть сотни тысяч строк), да и просто банальное нежелание работать мо̀̀згом
...
Рейтинг: 0 / 0
20.07.2015, 14:24
    #39011392
мсущко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
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
20.07.2015, 14:27
    #39011397
мсущко
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
hVostt, и самого главного я не понимаю, как твой "совет" поможет автору? У него на стороне сервера не была подключена директива EnableQuery.
...
Рейтинг: 0 / 0
20.07.2015, 18:15
    #39011657
Gul-79
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
мсущкона стороне сервера не была подключена директива EnableQuery.

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

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

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

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

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

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

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

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

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

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

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

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

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

ну а если этот слой напрямую прокинут в Kendo UI / Angular JS, мы получаем ковырялку данных с логикой в контроллерах. и не надо себя тешить надеждой, что если код из контроллера просто тупо вынесен в какие-то классы, чтоб "облегчить" контроллеры, который делает всё тоже самое -- жуёт Entities, и отдаёт наружу как есть, это нифига не бизнес, а лапша на постном масле.
...
Рейтинг: 0 / 0
21.07.2015, 10:22
    #39011933
мсущко1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
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
21.07.2015, 10:23
    #39011935
мсущко1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
P.S. Новая ветвь эпического кретинизма Сержа, он наплакался Джуджу, чтобы в форуме забанили гуестов. Браво!
...
Рейтинг: 0 / 0
21.07.2015, 11:31
    #39012039
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
мсущко1OData не обязана работать с базой. В OData используется модель. Откуда будут браться данные - не важно. Никакой прямого доступа у клиента нет, можно использовать ролевую модель и на основании её выдавать из контроллеров только ту информацию, которая доступна пользователю. Не неси чепухи, причем тут база?

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

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

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

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

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

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

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

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

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

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

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

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

Верните МСУ, хватит вредничать!
...
Рейтинг: 0 / 0
21.07.2015, 12:03
    #39012092
мсущко3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
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
21.07.2015, 12:08
    #39012101
мсущко3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Web API oData NavigationProperty равен null
hVosttмсущко1P.S. Новая ветвь эпического кретинизма Сержа, он наплакался Джуджу, чтобы в форуме забанили гуестов. Браво!

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

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


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