Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
Казалось бы, задача из учебника, однако в моём её нет. Есть простая таблица Код: sql 1. 2. 3. 4. 5. Есть соответствующая сущность в EntityFramework 6 CodeFirst, причём Category это тоже class, не enum В JSON хочется видеть property, а не вложенный объект Код: javascript 1. 2. 3. 4. 5. причём updatable Куда гуглить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 18:14 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
баз лайтер, Делать проекцию. Гугли в сторону OData + AutoMapper, например http://codethug.com/2015/02/13/web-api-deep-dive-dto-transformations-and-automapper-part-5-of-6/ В кратце, ты делаешь для своего продукт проекцию ProductDto, в которой твоя проперти превращается из вложенного объекта в примитивное свойство. Объяснять на пальцах долго, лучше погугли, посмотри примеры, навалом их. Если что непонятно, спрашивай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2016, 19:34 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
Я бы не назвал это задачкой из учебника. Это обход модели. Вот тут я показывал, как можно трачиться по кастомному свойству http://codearticles.ru/articles/2736 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 13:22 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиЯ бы не назвал это задачкой из учебника. Это обход модели. Вот тут я показывал, как можно трачиться по кастомному свойству http://codearticles.ru/articles/2736 Какой глупый и вредный пример. Есть нормальные проекции, максимально эффективные и простые, позволяют использовать всю мощь запросов через проекции, следовательно, кладутся на OData, как влитые. Зачем вот такой фигнёй заниматься, как у тебя в примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 13:56 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVostt, смотри, в чём различие. Я привел валидный пример, который 100% работает. Ты привел какой-то мусор с маппингами, никакой конкретики по существу. О чем с тобой можно говорить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 14:42 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
Смузи, а зачем показывать кишки внутреней сущности наружу? ты ж в любом случае отдаешь модель снизу + доп свойства. дто разве не чище будет и не будет тащить лишнего с нижних уровней, как хвост и пишет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 15:12 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
handmadeFromRu, не понимаю вопроса. SiteExt чем не дто? Речь о том, как поставить это дто в модель. Типовое наследование или проекции. Я понимаю, о чем хвост пишет, имел дело с проекциями еще в RIA сервисах (зародыш одаты под сервелат). Нахлебался. Просто хочу от него не теоретические сопли, а реальную практику. Тогда дальше продолжим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 15:22 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
Смузи, SiteExt да можно считать как дто, но оно наследует все свойства объекта, а оно может быть и не нужно. я просто часто видел что прям сущности уровня бд выплевывают и думаю что это не совсем правильно. хотя конечно могу ошибаться. вот на java-стартапе мне заставляет код нотация делать через наследование сущестей уровня хибера эт делать. у себя в проектах на .net. я перекладываю через плоские дто. поэтому и спросил, может в этом диалоге я пойму что делал не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 15:29 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
handmadeFromRuСмузи, SiteExt да можно считать как дто, но оно наследует все свойства объекта, а оно может быть и не нужно. Именно это и нужно в исходной задаче :) "хочется видеть property, а не вложенный объект" handmadeFromRuя просто часто видел что прям сущности уровня бд выплевывают и думаю что это не совсем правильно. В схему никто не гадит. Это чистый дто под ключ + ef маппинги (builder.EntitySet). И вся эта радость на ODataController. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 16:11 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиhVostt, смотри, в чём различие. Я привел валидный пример, который 100% работает. Ты привел какой-то мусор с маппингами, никакой конкретики по существу. О чем с тобой можно говорить? Ключевое различие в том, что ты не понимаешь в чём разница чистой выборки и SELECT N+1, в решении которое ты привёл. Маппить коллекции, имея возможность просто и удобно проецировать в DTO, имея готовый инструмент, это идиотизм. Уж извини. Идиотизм. Точка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 16:18 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиИменно это и нужно в исходной задаче :) "хочется видеть property, а не вложенный объект" В твоём решении твой маппинг слазиет за дополнительной пропертёй во вложенном объекте, сделав N запросов к серверу. Чтобы этого избежать, придётся присобачить Include, а если выборка из вложенного объекта более сложная, например, надо посчитать количество или сумму вложенных объектов одним запросом, и чтобы по этой проперти можно было прозрачно фильтровать, Include положит сервак на лопатки. Ты «нахлебался» с проекциями, потому что так и не научился ими пользоваться. Кури ProjectTo(), это одним словом красота, генерятся офигенно быстрые SQL, ничего лишнего, поверх проекций легко фигачатся запросы, как к объектам контекста напрямую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 16:21 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVostt, пример для одаты будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 16:40 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVosttВ твоём решении твой маппинг слазиет за дополнительной пропертёй во вложенном объекте, сделав N запросов к серверу. Тут не удержался, чтобы эту глупость не прокомментировать. Читай про $expand odata filter, одним запросом выбирается то, что нужно и намапливается на то, что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 16:44 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиТут не удержался, чтобы эту глупость не прокомментировать. Читай про $expand odata filter, одним запросом выбирается то, что нужно и намапливается на то, что нужно. Экспанд тебе не поможет, если ты хочешь инкапсулировать подзапрос, например отсечь вложенные удалённые записи, или не проходящие по безопасности, отдавать кишки реальной модели данных в БД никто в здравом уме никогда не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 17:17 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
Смузи, Код: c# 1. 2. 3. 4. Всё, что для клиента, лишнее отсекается в конфигурации проекции. Если требуется протащить безопасность, передаётся параметрами внутрь подзапроса. В результате имеем очень быстрый и эффективный запрос, без SELECT N+1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 17:25 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
спасибо за конструктивную дискуссию, пилю DTO для всех 100500 корневых сущностей, и настраиваю мэппинги в обе стороны Код: c# 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 19:29 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVosttотсечь вложенные удалённые записи ODataQueryOptions hVosttВсё, что для клиента, лишнее отсекается в конфигурации проекции Третий раз прошу выкатить полностью валидный код, но снова какие-то огрызки кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 19:47 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
баз лайтерспасибо за конструктивную дискуссию, пилю DTO для всех 100500 корневых сущностей, и настраиваю мэппинги в обе стороны Код: c# 1. 2. 3. 4. 5. замахаешься :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 20:29 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
баз лайтери настраиваю мэппинги в обе стороны Есть ReverseMap() для простых вариантов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2016, 22:35 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиhVosttотсечь вложенные удалённые записи ODataQueryOptions Т.е. ты хочешь пописать много кода, который просто можно было бы не писать и получить гораздо более эффективный результат? Ахахах.. Тем более QueryOptions также применим и для проекций, такскзать в old school стиле. СмузиТретий раз прошу выкатить полностью валидный код, но снова какие-то огрызки кода. Приведённого мною кода вполне достаточно для понимания. Если что-то не понятно, задай вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 07:56 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
баз лайтерспасибо за конструктивную дискуссию, пилю DTO для всех 100500 корневых сущностей, и настраиваю мэппинги в обе стороны Код: c# 1. 2. 3. 4. 5. Очень не удобный и плохой подход. Используй: 1) профили и автоматическое сканирование в рамках модуля https://github.com/AutoMapper/AutoMapper/wiki/Configuration 2) ReverseMap ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 07:59 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVosttТ.е. ты хочешь пописать много кода, который просто можно было бы не писать и получить гораздо более эффективный результат? Ахахах.. Тем более QueryOptions также применим и для проекций, такскзать в old school стиле. Не важно какой стиль, я говорю о рабочих решениях. Ниже варианты разбора. Один из них транслирует IQueryable для аксапты (нативный коннектор, который не поддерживает в коробке IQueryable). http://codearticles.ru/articles/2486 http://codearticles.ru/articles/2472 http://codearticles.ru/articles/2522 hVosttПриведённого мною кода вполне достаточно для понимания. Всё с тобой понятно. Когда дорастешь до рабочего кода, приходи - поговорим. А пока теоретики идут в лес. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 09:17 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
Смузи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, т.е. прекрасно знаешь о чём я говорю, но только откуда столько пренебрежения? Любишь строчить код? Ну это же твой фетишь, писать как можно больше кода. Пускай новички учатся решать свои задачи наименьшим количеством строк кода с максимальной эффективностью и гибкостью. Ты же можешь колотить по клавиатуре дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 10:45 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVostt(добавление в иерархию классов Entity, чтобы добавить поле — да ты точно упоролся!) * поле чисто для передачи данных клиенту (по сути функциональность DTO). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 10:47 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVosttЯ критиковал очень конкретный пример, который ты привёл по ссылке codearticles.ru/articles/2736 Задачи у автора такой не стояло. Критиковать можно даже Библию, только какое это имеет отношение к сабжу. hVosttя сказал в чём конкретно проблема этого примера, почему он вредный. Я ответил, проблема решается трансляцией IQueryable из ODataQueryOptions. Да, кода больше, но это 100% рабочее решение. Его плюс, что оно применяется в там, где никакими IQueryable и не пахнет. Я могу сам сконструировать любой запрос с фильтрами и сортировками (например, X++), который полезет в совсем другой движок и вытащит данные. Понимаешь, о чем речь? hVosttНе понимаю чё ты упираешься? Я не упираюсь. Я прошу привести годный пример, а не фантазировать о теориях. Ты привести такой пример не можешь. Собственно, не вижу смысла дальше продолжать с тобой эту тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 11:12 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=39352042&tid=1355675]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 258ms |
| total: | 419ms |

| 0 / 0 |
