powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / oData - лукап проперти
25 сообщений из 32, страница 1 из 2
oData - лукап проперти
    #39351336
баз лайтер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казалось бы, задача из учебника, однако в моём её нет. Есть простая таблица
Код: sql
1.
2.
3.
4.
5.
Table Product (
  Id int
 ,Name varchar(255)
 ,CategoryId int FOREIGN KEY References Category(id)
)


Есть соответствующая сущность в EntityFramework 6 CodeFirst, причём Category это тоже class, не enum

В JSON хочется видеть property, а не вложенный объект
Код: javascript
1.
2.
3.
4.
5.
{
    "Id": 1,
    "Name": "Product1",
    "Category": "FirstCategory"
}

причём updatable

Куда гуглить?
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351420
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
баз лайтер,

Делать проекцию. Гугли в сторону OData + AutoMapper, например

http://codethug.com/2015/02/13/web-api-deep-dive-dto-transformations-and-automapper-part-5-of-6/

В кратце, ты делаешь для своего продукт проекцию ProductDto, в которой твоя проперти превращается из вложенного объекта в примитивное свойство. Объяснять на пальцах долго, лучше погугли, посмотри примеры, навалом их. Если что непонятно, спрашивай.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351806
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы не назвал это задачкой из учебника. Это обход модели. Вот тут я показывал, как можно трачиться по кастомному свойству http://codearticles.ru/articles/2736
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351844
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиЯ бы не назвал это задачкой из учебника. Это обход модели. Вот тут я показывал, как можно трачиться по кастомному свойству http://codearticles.ru/articles/2736

Какой глупый и вредный пример.

Есть нормальные проекции, максимально эффективные и простые, позволяют использовать всю мощь запросов через проекции, следовательно, кладутся на OData, как влитые.

Зачем вот такой фигнёй заниматься, как у тебя в примере?
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351878
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, смотри, в чём различие. Я привел валидный пример, который 100% работает. Ты привел какой-то мусор с маппингами, никакой конкретики по существу. О чем с тобой можно говорить?
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351910
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смузи,

а зачем показывать кишки внутреней сущности наружу? ты ж в любом случае отдаешь модель снизу + доп свойства. дто разве не чище будет и не будет тащить лишнего с нижних уровней, как хвост и пишет.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351920
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu, не понимаю вопроса. SiteExt чем не дто? Речь о том, как поставить это дто в модель. Типовое наследование или проекции. Я понимаю, о чем хвост пишет, имел дело с проекциями еще в RIA сервисах (зародыш одаты под сервелат). Нахлебался. Просто хочу от него не теоретические сопли, а реальную практику. Тогда дальше продолжим.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351929
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смузи,

SiteExt да можно считать как дто, но оно наследует все свойства объекта, а оно может быть и не нужно. я просто часто видел что прям сущности уровня бд выплевывают и думаю что это не совсем правильно. хотя конечно могу ошибаться. вот на java-стартапе мне заставляет код нотация делать через наследование сущестей уровня хибера эт делать. у себя в проектах на .net. я перекладываю через плоские дто. поэтому и спросил, может в этом диалоге я пойму что делал не так.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39351993
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuСмузи, SiteExt да можно считать как дто, но оно наследует все свойства объекта, а оно может быть и не нужно.
Именно это и нужно в исходной задаче :) "хочется видеть property, а не вложенный объект"

handmadeFromRuя просто часто видел что прям сущности уровня бд выплевывают и думаю что это не совсем правильно.
В схему никто не гадит. Это чистый дто под ключ + ef маппинги (builder.EntitySet). И вся эта радость на ODataController.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352000
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиhVostt, смотри, в чём различие. Я привел валидный пример, который 100% работает. Ты привел какой-то мусор с маппингами, никакой конкретики по существу. О чем с тобой можно говорить?

Ключевое различие в том, что ты не понимаешь в чём разница чистой выборки и SELECT N+1, в решении которое ты привёл. Маппить коллекции, имея возможность просто и удобно проецировать в DTO, имея готовый инструмент, это идиотизм. Уж извини. Идиотизм. Точка.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352006
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиИменно это и нужно в исходной задаче :) "хочется видеть property, а не вложенный объект"

В твоём решении твой маппинг слазиет за дополнительной пропертёй во вложенном объекте, сделав N запросов к серверу. Чтобы этого избежать, придётся присобачить Include, а если выборка из вложенного объекта более сложная, например, надо посчитать количество или сумму вложенных объектов одним запросом, и чтобы по этой проперти можно было прозрачно фильтровать, Include положит сервак на лопатки.

Ты «нахлебался» с проекциями, потому что так и не научился ими пользоваться. Кури ProjectTo(), это одним словом красота, генерятся офигенно быстрые SQL, ничего лишнего, поверх проекций легко фигачатся запросы, как к объектам контекста напрямую.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352033
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, пример для одаты будет?
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352042
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttВ твоём решении твой маппинг слазиет за дополнительной пропертёй во вложенном объекте, сделав N запросов к серверу.
Тут не удержался, чтобы эту глупость не прокомментировать. Читай про $expand odata filter, одним запросом выбирается то, что нужно и намапливается на то, что нужно.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352077
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиТут не удержался, чтобы эту глупость не прокомментировать. Читай про $expand odata filter, одним запросом выбирается то, что нужно и намапливается на то, что нужно.

Экспанд тебе не поможет, если ты хочешь инкапсулировать подзапрос, например отсечь вложенные удалённые записи, или не проходящие по безопасности, отдавать кишки реальной модели данных в БД никто в здравом уме никогда не будет.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352085
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смузи,

Код: c#
1.
2.
3.
4.
[EnableQuery]
public IQueryable<ProductDto> Get() {
    return _store.Query().ProjectTo<ProductDto>();
}



Всё, что для клиента, лишнее отсекается в конфигурации проекции. Если требуется протащить безопасность, передаётся параметрами внутрь подзапроса. В результате имеем очень быстрый и эффективный запрос, без SELECT N+1.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352180
баз лайтер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за конструктивную дискуссию, пилю DTO для всех 100500 корневых сущностей, и настраиваю мэппинги в обе стороны
Код: c#
1.
2.
3.
4.
5.
Mapper.Initialize(cfg =>
            {
                cfg.CreateMap<Models.Product, ProductDTO>();
                cfg.CreateMap<ProductDTO, Models.Product>();
            });
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352198
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttотсечь вложенные удалённые записи
ODataQueryOptions

hVosttВсё, что для клиента, лишнее отсекается в конфигурации проекции
Третий раз прошу выкатить полностью валидный код, но снова какие-то огрызки кода.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352232
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
баз лайтерспасибо за конструктивную дискуссию, пилю DTO для всех 100500 корневых сущностей, и настраиваю мэппинги в обе стороны
Код: c#
1.
2.
3.
4.
5.
Mapper.Initialize(cfg =>
            {
                cfg.CreateMap<Models.Product, ProductDTO>();
                cfg.CreateMap<ProductDTO, Models.Product>();
            });


замахаешься :)
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352286
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
баз лайтери настраиваю мэппинги в обе стороны

Есть ReverseMap() для простых вариантов.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352376
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиhVosttотсечь вложенные удалённые записи
ODataQueryOptions

Т.е. ты хочешь пописать много кода, который просто можно было бы не писать и получить гораздо более эффективный результат? Ахахах.. Тем более QueryOptions также применим и для проекций, такскзать в old school стиле.


СмузиТретий раз прошу выкатить полностью валидный код, но снова какие-то огрызки кода.

Приведённого мною кода вполне достаточно для понимания. Если что-то не понятно, задай вопрос.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352378
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
баз лайтерспасибо за конструктивную дискуссию, пилю DTO для всех 100500 корневых сущностей, и настраиваю мэппинги в обе стороны
Код: c#
1.
2.
3.
4.
5.
Mapper.Initialize(cfg =>
            {
                cfg.CreateMap<Models.Product, ProductDTO>();
                cfg.CreateMap<ProductDTO, Models.Product>();
            });



Очень не удобный и плохой подход. Используй:

1) профили и автоматическое сканирование в рамках модуля

https://github.com/AutoMapper/AutoMapper/wiki/Configuration

2) ReverseMap
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352404
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttТ.е. ты хочешь пописать много кода, который просто можно было бы не писать и получить гораздо более эффективный результат? Ахахах.. Тем более QueryOptions также применим и для проекций, такскзать в old school стиле.
Не важно какой стиль, я говорю о рабочих решениях. Ниже варианты разбора. Один из них транслирует IQueryable для аксапты (нативный коннектор, который не поддерживает в коробке IQueryable).
http://codearticles.ru/articles/2486
http://codearticles.ru/articles/2472
http://codearticles.ru/articles/2522

hVosttПриведённого мною кода вполне достаточно для понимания.
Всё с тобой понятно. Когда дорастешь до рабочего кода, приходи - поговорим. А пока теоретики идут в лес.
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352446
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СмузиhVosttТ.е. ты хочешь пописать много кода, который просто можно было бы не писать и получить гораздо более эффективный результат? Ахахах.. Тем более QueryOptions также применим и для проекций, такскзать в old school стиле.
Не важно какой стиль, я говорю о рабочих решениях. Ниже варианты разбора. Один из них транслирует IQueryable для аксапты (нативный коннектор, который не поддерживает в коробке IQueryable).
http://codearticles.ru/articles/2486
http://codearticles.ru/articles/2472
http://codearticles.ru/articles/2522

hVosttПриведённого мною кода вполне достаточно для понимания.
Всё с тобой понятно. Когда дорастешь до рабочего кода, приходи - поговорим. А пока теоретики идут в лес.

Ну и чё ты накидал какого-то барахла тут? Я критиковал очень конкретный пример, который ты привёл по ссылке codearticles.ru/articles/2736, я сказал в чём конкретно проблема этого примера, почему он вредный. Могу повторить ещё раз: SELECT N+1, не целевое наследование (добавление в иерархию классов Entity, чтобы добавить поле — да ты точно упоролся!).

Не понимаю чё ты упираешься? С чем не согласен? Сам же упоминал про Automapper IQueryable Extensions, т.е. прекрасно знаешь о чём я говорю, но только откуда столько пренебрежения? Любишь строчить код? Ну это же твой фетишь, писать как можно больше кода. Пускай новички учатся решать свои задачи наименьшим количеством строк кода с максимальной эффективностью и гибкостью. Ты же можешь колотить по клавиатуре дальше
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352448
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt(добавление в иерархию классов Entity, чтобы добавить поле — да ты точно упоролся!)

* поле чисто для передачи данных клиенту (по сути функциональность DTO).
...
Рейтинг: 0 / 0
oData - лукап проперти
    #39352477
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ критиковал очень конкретный пример, который ты привёл по ссылке codearticles.ru/articles/2736
Задачи у автора такой не стояло. Критиковать можно даже Библию, только какое это имеет отношение к сабжу.

hVosttя сказал в чём конкретно проблема этого примера, почему он вредный.
Я ответил, проблема решается трансляцией IQueryable из ODataQueryOptions. Да, кода больше, но это 100% рабочее решение. Его плюс, что оно применяется в там, где никакими IQueryable и не пахнет. Я могу сам сконструировать любой запрос с фильтрами и сортировками (например, X++), который полезет в совсем другой движок и вытащит данные. Понимаешь, о чем речь?

hVosttНе понимаю чё ты упираешься?
Я не упираюсь. Я прошу привести годный пример, а не фантазировать о теориях. Ты привести такой пример не можешь. Собственно, не вижу смысла дальше продолжать с тобой эту тему.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / oData - лукап проперти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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