Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
МСУ Причем тут EF и хранимая процедура? Надеялся что всю работу по построению JSON возьмет на себя APIController. Я совсем недавно познакомился с ASP.NET так что очень много незнакомого и непонятного. Спасибо за совет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 15:45 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
МСУ, какое сообщение было первым? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:05 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
Доброго всем дня! Продолжаю разбираться с EF и WEB API. Есть процедура на SQL сервере возвращает следующий набор данных ID|name|hobbies1|hobbies2|hobbies3|address| 1 | Doe | reading | cinema | sports | ABC | как вернуть вот такой JSON: Код: xml 1. 2. 3. 4. 5. 6. 7. И вообще возможно так сделать из одного набора данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:13 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
Сделай себе класс и оборачивай его json. Либо можно анонимным типом обойтись. Код: c# 1. 2. 3. 4. 5. 6. 7. Причем тут EF и хранимая процедура? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:16 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
monstrU , 16760595 МСУ , например берем класс RootObject из Вашего примера. У меня есть 2 процедуры на сервере: 1) возвращает: ID, name, address 2) возвращает: ID, hobbies Как сделать JOIN данных из этих 2-х процедур по ID, чтобы записать данные в класс RootObject Или это вообще по другому делается? Если не сложно можно простой пример? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:24 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
RAVen42 monstrU , 16760595 МСУ , например берем класс RootObject из Вашего примера. У меня есть 2 процедуры на сервере: 1) возвращает: ID, name, address 2) возвращает: ID, hobbies Как сделать JOIN данных из этих 2-х процедур по ID, чтобы записать данные в класс RootObject Или это вообще по другому делается? Если не сложно можно простой пример?Простой пример - это сначала заполнить спискок List<RootObject> данными из первой процедуры, а потом в цикле, или при первом обращении к свойству hobbies (Lazy), заполнить последнее данными из второй процедуры. Также RootObject может реализовывать так называемый шаблон Proxy, и при обращении к свойству hobbies, всегда дёргать хранимую процедуру. Но всё это не имеет никакого отношения к JSON и Web API. Конвертацию модели в JSON в Web API выполняет соответсвующий formatter, которму абсолютно по фигу, каким образом была заполнена модель, которую необходимо преобразовать в JSON. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:40 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
skyANA, да я понимаю (уже) что всё это не имеет никакого отношения к JSON и Web API. рассматриваемая мной ситуация происходит в контексте WEB API и JSON. и я понимаю что formatter'у абсолютно пофиг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:47 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
авторПростой пример - это сначала заполнить спискок List<RootObject> данными из первой процедуры, а потом в цикле, или при первом обращении к свойству hobbies (Lazy), заполнить последнее данными из второй процедуры. Как то это не красиво и долго. А если первая процедура вернет 10000 записей? эт чтож дергать 10000 раз 2-ую процедуру? Циклы тоже как то не очень красиво. Неужели нельзя сделать: 1) Выполнить процедуру №1 1) Выполнить процедуру №2 а потом что то вроде такого (очень сильно утрирую): Код: c# 1. таким образом заполним rootobject данными из двух процедур а дальше Код: c# 1. и formatter rootobject красиво преобразует в JSON я вот про что спрашиваю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 16:57 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
RAVen42, EF лишь формирует запрос на языке T-SQL за Вас и отправляет серверу на выполнение. Напишите-ка то, что хотите в виде одного запроса (в виде одной хранимой процедуры). По какому полю Вы собрались JOIN-ить результаты хранимых процедур? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 17:15 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
Зачем вообще использовать хранимые процедуры? Нельзя-ли написать запрос, или представление (VIEW)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 17:17 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
авторПо какому полю Вы собрались JOIN-ить результаты хранимых процедур? по полю ID Могу написать и в виде одной процедуры, например в поле hobbies , будет строка с перечислением "reading,cinema,sports " skyANAЗачем вообще использовать хранимые процедуры? Нельзя-ли написать запрос, или представление (VIEW)? 1) Преследую цель по максимуму логику сделать на сервере, чтоб не переделывать фронт-енд. 2) НА T-SQL значительно проще и удобней написать и поддерживать МЕГА запрос, нежели писать его в коде. 3) View не вариант, слишком много ограничений для моего случая( временные таблицы, функции и т.д....) Весь вопрос как легко и красиво сделать из данных возвращаемых процедурой JSON сложной структуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 17:26 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
RAVen42авторПо какому полю Вы собрались JOIN-ить результаты хранимых процедур? по полю ID Могу написать и в виде одной процедуры, например в поле hobbies , будет строка с перечислением "reading,cinema,sports " skyANAЗачем вообще использовать хранимые процедуры? Нельзя-ли написать запрос, или представление (VIEW)? 1) Преследую цель по максимуму логику сделать на сервере, чтоб не переделывать фронт-енд. 2) НА T-SQL значительно проще и удобней написать и поддерживать МЕГА запрос, нежели писать его в коде. 3) View не вариант, слишком много ограничений для моего случая( временные таблицы, функции и т.д....) Весь вопрос как легко и красиво сделать из данных возвращаемых процедурой JSON сложной структуры.Легко и красиво - это сформировать запрос с нужными JOIN-ами, выполнить его, а результат замапить в набор объектов, что formatter превратит в JSON. Собственно, что и делает ORM. Но в Вашем случае почему-то запрос составить нельзя. А в ORM нет чудесных механизмов для объединения двух хранимок в одну в одном запросе. Пишите ещё одну хранимую процедуру, что будет вызывать первые две, объединять (JOIN) результаты по полю ID, и возвращать. И используйте её: Data read using Stored Procedure . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 18:05 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
P.S.: а от использования МЕГА запросов, временных таблиц и функции при выборке данных можно и избавиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2014, 18:10 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
А если первая процедура вернет 10000 записей? эт чтож дергать 10000 раз 2-ую процедуру? А еще некоторые используют пейджинг...:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 02:40 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
CalabongaА если первая процедура вернет 10000 записей? эт чтож дергать 10000 раз 2-ую процедуру? А еще некоторые используют пейджинг...:)В контексте Web API, для выборки 10000 записей из базы, зачем он нужен? Ну хочет потребитель получить все 10000 записей от вашего API, флаг ему вруки. Захочет ограничить выборку, сформирует другой запрос в формате OData. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 08:15 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
skyANA Легко и красиво - это сформировать запрос с нужными JOIN-ами, выполнить его, а результат замапить в набор объектов, что formatter превратит в JSON. Собственно, что и делает ORM. Но в Вашем случае почему-то запрос составить нельзя. А в ORM нет чудесных механизмов для объединения двух хранимок в одну в одном запросе. Пишите ещё одну хранимую процедуру, что будет вызывать первые две, объединять (JOIN) результаты по полю ID, и возвращать. И используйте её: Да дело вовсе не в одной или двух процедурах и не в количестве возвращаемых данных. процедуру использую ТОЛЬКО из соображений: 1) Преследую цель по максимуму логику сделать на сервере, чтоб не переделывать фронт-енд. 2) НА T-SQL значительно проще и удобней написать и поддерживать МЕГА запрос, нежели писать его в коде. 3) View не вариант, слишком много ограничений для моего случая( временные таблицы, функции и т.д....) skyANA P.S.: а от использования МЕГА запросов, временных таблиц и функции при выборке данных можно и избавиться. Да можно но это очень неудобно. Но когда при выборке используется куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами и т.д. Как Вы себе представляете писать этот запрос, состоящий из 1000+ строк в коде? Зачем в коде разводить бардак? Когда можно просто очень коротко и ясно написать Код: c# 1. Допустим вернула у меня процедура такие данные: ID|name| hobbies |address | 1 | Doe | reading,cinema,sports | ABC | Что мне написать в коде чтоб результатом был JSON {"ID":1, "name":"Doe", "hobbies": ["reading", "cinema", "sports" ], "address":"ABC"} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 13:36 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
RAVen42когда при выборке используется куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами и т.д. Как Вы себе представляете писать этот запрос, состоящий из 1000+ строк в коде?Очень просто: вызвать всю эту "куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами" при добавлении данных, а при выборке тупо вернуть готовый результат запросом вида: SELECT Column1, Column2, ..., ColumnN FROM Table. Интересно, сколько по времени у Вас выполняется такая хранимая процедура? Что будет при нагрузке скажем в 20 запросов в секунду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 14:03 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
RAVen42Допустим вернула у меня процедура такие данные: ID|name| hobbies |address | 1 | Doe | reading,cinema,sports | ABC | Что мне написать в коде чтоб результатом был JSON {"ID":1, "name":"Doe", "hobbies": ["reading", "cinema", "sports" ], "address":"ABC"} Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. При этом в классе Startup прописать: Код: c# 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 14:11 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
skyANA, т.е. благодаря именно этому Код: c# 1. 2. 3. 4. 5. у меня получится JSON сложной структуры? авторОчень просто: вызвать всю эту "куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами" при добавлении данных, а при выборке тупо вернуть готовый результат запросом вида: SELECT Column1, Column2, ..., ColumnN FROM Table. skyANA, понимаете эта вся куча функций ... это один единый запрос, где таблицы связаны между собой юнионами, джоинами, потом транспонированы, и другие преобразования я вот ни как не могу понять зачем этот много-строчный запрос пихать в код программы? Когда можно обойтись простым Exec в одну строчку. Интересно, сколько по времени у Вас выполняется такая хранимая процедура? Что будет при нагрузке скажем в 20 запросов в секунду? При правильном написании, и достаточных мощностях сервера, такая процедура выполняется за доли секунд. К тому-же процедуры имеют планы и статистики, которые значительно ускоряют её работу. Но это уже совсем другая история :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 17:36 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
RAVen42skyANA, т.е. благодаря именно этому Код: c# 1. 2. 3. 4. 5. у меня получится JSON сложной структуры?Нет. Разве из кода не понятно, что происходит? RAVen42авторОчень просто: вызвать всю эту "куча функций, да при этом ещё и с десяток линкованых серверов со своими процедурами и таблицами" при добавлении данных, а при выборке тупо вернуть готовый результат запросом вида: SELECT Column1, Column2, ..., ColumnN FROM Table. skyANA, понимаете эта вся куча функций ... это один единый запрос, где таблицы связаны между собой юнионами, джоинами, потом транспонированы, и другие преобразования я вот ни как не могу понять зачем этот много-строчный запрос пихать в код программы? Когда можно обойтись простым Exec в одну строчку.А я и не предлагаю "много-строчный запрос пихать в код программы", читайте внимательно. RAVen42Интересно, сколько по времени у Вас выполняется такая хранимая процедура? Что будет при нагрузке скажем в 20 запросов в секунду? При правильном написании, и достаточных мощностях сервера, такая процедура выполняется за доли секунд. К тому-же процедуры имеют планы и статистики, которые значительно ускоряют её работу. Но это уже совсем другая история :)То есть конкретных показателей у Вас нет, только предположения. Не очень хорошо. Планы и статистики-то имеются, но также имеется и такая штука как parameter sniffing, когда планы и статистики летят в трубу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2014, 17:48 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
skyANA, авторНет. Разве из кода не понятно, что происходит? Если честно, то не совсем понятно. авторА я и не предлагаю "много-строчный запрос пихать в код программы", читайте внимательно. т.е. типа витрины данных сделать, да можно и так. авторТо есть конкретных показателей у Вас нет, только предположения. Не очень хорошо. пока что нет, так-как я только разбираюсь с самим процессом. авторПланы и статистики-то имеются, но также имеется и такая штука как parameter sniffing, когда планы и статистики летят в трубу. SQL я знаю очень хорошо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 05:59 |
|
||
|
сложный JSON
|
|||
|---|---|---|---|
|
#18+
RAVen42skyANA, авторНет. Разве из кода не понятно, что происходит? Если честно, то не совсем понятно.JsonFormatter сам преобразует IEnumerable<Person> в JSON. Я лишь сказал ему: "Писать имена свойств с маленькой буквы и использовать отступы". RAVen42авторА я и не предлагаю "много-строчный запрос пихать в код программы", читайте внимательно. т.е. типа витрины данных сделать, да можно и так.Нет, просто шаблон "Денормализация" использовать. RAVen42авторТо есть конкретных показателей у Вас нет, только предположения. Не очень хорошо. пока что нет, так-как я только разбираюсь с самим процессом. авторПланы и статистики-то имеются, но также имеется и такая штука как parameter sniffing, когда планы и статистики летят в трубу. SQL я знаю очень хорошо Странно, с одной стороны SQL знаете хорошо, с другой стороны конкретных показателей у Вас нет. Ну да ладно, если знаете хорошо, то разберётесь в производительности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 08:45 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38787640&tid=1356910]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 336ms |

| 0 / 0 |
