Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиЗадачи у автора такой не стояло. Критиковать можно даже Библию, только какое это имеет отношение к сабжу. Ты привёл очень плохое решение. Я пояснил почему. К сабжу оно имеет прямое отношение, ты даёшь вредные советы. То, что они при этом рабочие — не оправдание. СмузиЯ ответил, проблема решается трансляцией IQueryable из ODataQueryOptions. Да, кода больше, но это 100% рабочее решение. Его плюс, что оно применяется в там, где никакими IQueryable и не пахнет. Я могу сам сконструировать любой запрос с фильтрами и сортировками (например, X++), который полезет в совсем другой движок и вытащит данные. Понимаешь, о чем речь? Плюс, про который ты говоришь, очевиден только в единичных случаях. Я согласен, что такие бывают, они обязательно будут, но это не значит, что из-за них надо теперь всегда решать задачу сложно, когда в большинстве случаев её решить можно просто и гораздо меньшими усилиями. Большая часть покрывается проекциями в DTO, при чём довольно сложными и с параметризованными подзапросами, которые Automapper делать умеет. СмузиЯ не упираюсь. Я прошу привести годный пример, а не фантазировать о теориях. Ты привести такой пример не можешь. Собственно, не вижу смысла дальше продолжать с тобой эту тему. Код: c# 1. 2. 3. 4. Ещё больше упростил пример. Что тебе здесь непонятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 11:25 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVostt, всё что я сказал выше - повторил несколько раз. Твоя квалификация под вопросом, в дальнейшем обсуждении темы не вижу смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 11:43 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиhVostt, всё что я сказал выше - повторил несколько раз. Твоя квалификация под вопросом, в дальнейшем обсуждении темы не вижу смысла. Хорошая попытка, МСУ, но нет Спрашиваю, что тебе не понятно в приведённом примере, чего не хватает, ты несёшь какой-то больной бред насчёт квалификации. Смысла ты не видишь, потому что сам уже не знаешь за что зацепиться, и что сказать хотел Не пей так больше, до НГ ещё далеко. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 13:04 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
hVosttСпрашиваю, что тебе не понятно в приведённом примере, чего не хватает Я уже отвечал, мне ничего непонятно. Нужна модель, маппинги, нужен реальный рабочий пример, а не огрызки. Такой пример, какие всегда даю я и некоторые другие участники форумов . Где взял код, вставил в одата сервис и заработало. Но ты не в состоянии привести рабочий вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 13:10 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
СмузиЯ уже отвечал, мне ничего непонятно. Нужна модель, маппинги, нужен реальный рабочий пример, а не огрызки. Такой пример, какие всегда даю я и некоторые другие участники форумов . Где взял код, вставил в одата сервис и заработало. Но ты не в состоянии привести рабочий вариант. Модель, маппинги, реальные рабочие примеры — этого всего по теме хоть одним местом жуй. Не моя проблема, что ты не в состоянии нагуглить полноценных рабочих примеров. Пример, который я привёл отлично поясняет мою мысль, если бы у тебя были вопросы, ты бы их задал, были бы замечания, ты бы сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 13:17 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
накину еще немного: чтобы сохранять объекты ReverseMap не подойдет, так как нужно разрешать id из имен Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2016, 16:39 |
|
||
|
oData - лукап проперти
|
|||
|---|---|---|---|
|
#18+
баз лайтерReverseMap Неправильный подход, либо Update, либо Create, в теминах REST это или PUT или POST, как совершенно отдельные операции. Делать Update-OR-Create в одном методе POST на мой взгляд — ошибка проектирования, с которой придётся не раз поиметь много-много проблем. То, что на первый взгляд выглядит упрощением, выльется в каскадный ворох проблем. Никогда не рекомендую так делать. Создание это создание, изменение это изменение. У них может быть совершенно разная логика и скорее всего со временем будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2016, 17:51 |
|
||
|
|

start [/forum/topic.php?all=1&fid=18&tid=1355675]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 348ms |

| 0 / 0 |
