powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Тема для анонимной психологической помощи пользующемся EF программистам.
25 сообщений из 33, страница 1 из 2
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743504
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, как вы терпите эти слооожные вложенные запросы с десятками полей с маловразумительными названиями полей и декартовыми произведениями, которые на выходе из 10 тысяч строк получают 10 строк ?

Много людей носят EF на руках и пропагандируют. И кто-то попадается в их сети. Попадаются на фразы, встреченные в айтишных журналах "попробуй, первый раз бесплатно и будет приятно писать код". А потом прикручивают это к серьезному проекту и затем уже страдают не в силах вырваться из этой пагубной привычки (я все еще про EF пишу), т.к. это потребует переписывания большого куска программы.

Как вы оптимизируете получающиеся запросы? Когда пользователь жалуется на медленный запрос, вы ловите его с поличпрофайлером и затем вдууумчиво разлядываете запросы со вложенностью 10, пытаясь понять что же тут тормозит.

Как ?
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743549
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EF в первую очередь предназначен для простой работы (CRUD) с одной записью (+связанные записи из других таблиц) или простыми списками. Зачастую это 90% (а то и 100%) необходимости для бизнес-приложения.

Если у тебя бизнес-задачи сводятся к каким-то мощным долгим запросам - значит EF не для тебя
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743565
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Запросы со сложной вложенностью можно легко получить где угодно. Например, найти всех User'ов у которых выполняется условие - найти все их документы, к которыми связанны договоры и даты этих договоров находятся в периоде от и до. Такой просто запрос запросто сгенерит проблемный запрос и выдаст тысяч 10 строк, из которых EF соберет всего 10.
И что, вы предлагаете отказаться от использования EF везде где могут встретится такие ситуации ? Полагаю это 100% приложений.
А значит EF не пригоден везде, кроме как студенческом проекте.

Иногда мне кажется проще тянуть данные в C# и там уже ручками их обрабатывать, чем получить сложный запрос и потом страдать при его отладке и поддержке.
Но вот я и спрашиваю как другие с этим справляются.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743577
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreНапример, найти всех User'ов у которых выполняется условие - найти все их документы, к которыми связанны договоры и даты этих договоров находятся в периоде от и до. Такой просто запрос запросто сгенерит проблемный запрос и выдаст тысяч 10 строк, из которых EF соберет всего 10.Не вижу, где бы мог тут затупить EF. Но по самому изложению задачи видно, что скорее всего автор пытается искать пользователей, в то время, как нужно искать договоры ))

Вообще, у людей при переходе с SQL на EF наблюдается сильная ломка - это давно замечено и я сам через это проходил. Потом проходит. Да, SQL предоставляет бОльший контроль, а EF большее удобство.
Просто нужно немножко мыслить категориями EF и со временем всё наладится.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743594
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreТакой просто запрос запросто сгенерит проблемный запрос и выдаст тысяч 10 строк, из которых EF соберет всего 10.

Я когда-то работал с одним чудиком, который упорно считал, что EF тянет всю таблицу в виде коллекции объектов, а потом только их фильтрует и т.п.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743598
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Ну погодите. типичная же ситуация ). "Найди ка мне всех раздолбаев, которые назаключали договоры 31-го дкабря и 1-го января. Они очевидно были выпимши, я хочу их наказать". Такая простая задача уже сделает запрос с 3мя вложенностями куда EF вставит десятки полей с именами А1, A2 и т.д.

И вложенность может быть в итоге и еще больше - можно еще подтянуть всех customer'ов, привязанных в договоре А ТАКЖЕ их контакты, чтобы принести им извинения по телефону. И вот, имеем вложенность 5 ! И десятки малочитабельных полей и декартовы произведения из десятков тысяч сущностей.

И вот потом как это все отлаживать или профилировать, не ясно вообще. Такие сложные запросы это проза жизни разработчика EF. Большинство запросов, выходящих за простенький CRUD вылезают в это. Это не какая-то редкость. Это норма.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743599
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,

ну видимо он не знал про отложенное выполнение и путал iQueriable и iEnumerable )
Я то не про это говорю вообще )
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743612
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Итоговый, стандартный запрос.
"Найди ка мне всех раздолбаев, которые назаключали договоры 31-го дкабря и 1-го января. Также всех customer'ов, привязанных к этим договорам и их контакты НЕ помеченные как НЕ ЗВОНИТЬ и которым мы еще никогда не звонили (что хранится в виде истории, в другой таблице)" Как вам такой просто запрос на человеческом языке, которые сгенерит кашу в EF ? :)
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743671
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreShocker.Pro,

Итоговый, стандартный запрос.
"Найди ка мне всех раздолбаев, которые назаключали договоры 31-го дкабря и 1-го января. Также всех customer'ов, привязанных к этим договорам и их контакты НЕ помеченные как НЕ ЗВОНИТЬ и которым мы еще никогда не звонили (что хранится в виде истории, в другой таблице)" Как вам такой просто запрос на человеческом языке, которые сгенерит кашу в EF ? :)

А какая разница, что он там сгенерит? Все равно, если проблемы со скоростью запроса, то план выполнения надо смотреть, а не сам запрос.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743683
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,

проблема в том, что там я сам не понимаю что он сгенерил.
Особенно EF любит делать все через Union.

Он может запросто взять этот сложный запрос, описанный мной и обединить его так:

............................. очень много фигниииии.................
................................. ну ооооооочень много...................
.............. поля, поля, круком поля F1, F2, A1, какие только хочешь
..................... where x != 1
...... а тут еще больше полей, чтобы было интересней
...... аааа и тут тоже.
.... и здеся

union


............................. очень много фигниииии.................
................................. ну ооооооочень много...................
.............. поля, поля, круком поля F1, F2, A1, какие только хочешь
..................... where x != 2 OR where x > 3
...... а тут еще больше полей, чтобы было интересней
...... аааа и тут тоже.
.... и здеся


И вот ты такой смотришь на этот чертов запрос и охреневаешь ! 500 строк склеивается с еще 500тами и разница между ними в 5 символах. В 5ти символах Карл ! А рядом стоит юзер и ругается, что у него отчет не генерится, потому, что соединение отваливается по таймауту и мне нужно найти где проблема и что тормозит. Но для начала все таки понять что делает запрос.

Вот как разработчики EF с этим живут, справляются и не спиваются ?
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743692
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreпроблема в том, что там я сам не понимаю что он сгенерил.

На самом деле, пример задачи, что ты привел, он совсем не для OLTP приложения. По уму, под такие запросы надо вообще проектировать отдельную OLAP-херь, где и сама БД будет совсем по другим принципам и схеме построена.

А вообще, EF так-то позволяет и текстом запросы писать, и хранимки вызывать, если надо.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743704
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,

Ну что вы такое говорите. Для простых запросов из трех (пяти) связанных таблиц, из которых EF делает кашу, городить OLTP.
Этак получится, что нужно делать OLTP Для всего, где может встретится хоть один Join.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39743796
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCorefkthat,

Ну что вы такое говорите. Для простых запросов из трех (пяти) связанных таблиц, из которых EF делает кашу, городить OLTP.
Этак получится, что нужно делать OLTP Для всего, где может встретится хоть один Join.

Ну я, чесговоря, с EF работал еще с тех пор когда еще EF и не было (был LINQ 2 SQL). И не могу вспомнить, чтобы на деле надо было что-то сложнее чем "вытащи мне сущность по ID и, возможно пару связанных сущностей". То, что ты привел - это явно задача для какого-то отчета, а для отчетов никто ORM пользоваться и не станет.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39744249
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,

Ну например такой запрос "найди ка мне все коробки с продуктами, отправленными в регион такой-то, и дай мне только те коробки у которых внутри больше 2х банок, но только такие банки, внутри которых желтые помидоры а не красные".
По моему это совершенно простой запрос, который запросто может встретится в любой программе. Но EF, скорее всего, это обернет в чудовищные
Код: sql
1.
from (select A1,A2 from (select B1,B2 from ....))  union from (select A1,A2 from (select B1,B2 from ....))  union....



Как я понимаю, вы считаете, что для такого рода запросов EF не предназначен да ? Тогда для чего предназначен EF, кроме школьных лабораторных, где могут встретится только задачи вида "дай мне все апельсины красного цвета и вес которых не больше 500 грамм".
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39744270
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WaspNewCore,
Поясни, как твой запрос Выше в любой программе вводят?
Диктуют в окошечко?
Извини за юмор)
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39744273
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WaspNewCore,
Покажи где он union генерирует. Вроде не должен.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39744286
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WebPrj,

Не могу показать даже сейчас. В последних проектах отказались от EF. Надоело с ним возится, и старых проектов в эксплуатации, с EF уже нет. Но решил создать эту тему, чтобы понять как другие существуют с этим EF, может как-то справляются с этим всем.
Может найду ответы и снова вернусь к EF. Хотя и не очень хочется, но приходится поддерживать какие-то тренды...

Все эти сложные запросы у меня бывали, с юнионами в том числе. Спровоцировать их вполне реально, неужели у пользователей EF такого никогда не было и это я (мы) настолько не умею его готовить ? Не поверю.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39744297
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WaspNewCore,
Без фактов твой вопрос и топик обречён.
ОРМ не только в шарпе есть.
Биже к коду, коллега)
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39744309
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я думал все с этим сталкивались, а те кто используют EF и вовсе видят это постоянно, так, что думал не понадобятся живые примеры. Нужно будет не забыть поднят эту тему когда снова буду работать с EF.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39744823
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreНу например такой запрос "найди ка мне все коробки с продуктами, отправленными в регион такой-то, и дай мне только те коробки у которых внутри больше 2х банок, но только такие банки, внутри которых желтые помидоры а не красные".
По моему это совершенно простой запрос, который запросто может встретится в любой программе. Но EF, скорее всего, это обернет в чудовищные
Код: sql
1.
from (select A1,A2 from (select B1,B2 from ....))  union from (select A1,A2 from (select B1,B2 from ....))  union....



Как я понимаю, вы считаете, что для такого рода запросов EF не предназначен да ? Тогда для чего предназначен EF, кроме школьных лабораторных, где могут встретится только задачи вида "дай мне все апельсины красного цвета и вес которых не больше 500 грамм".
план созданного в ЕF запроса не будет отличатся от написанного вручную, а если и будет - то зачастую в лучшую сторону. Указанный запрос элементарный, там не будет ничего сложного ни в самом запросе, ни в плане
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39748021
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки хочу уточнить.
Никто не сталкивается с тем, что EF генерит SQL запросы вида
Код: c#
1.
from (select A1,A2 from (select B1,B2 from ....))  union from (select A1,A2 from (select B1,B2 from ....))  union....



Как я написал выше, спровоцировать такой запрос очень просто. Достаточно, чтобы по условии задачи у вас были какие-то логические условия, применяемые к навигационной проперти 4-5го уровня вложенности. Такого не избежать. Точнее можно, но для этого придется тянуть на клиента Ienumerable верхнего уровня и потом через foreach спускаться вниз, но это, очевидно не правильно.

Также я не помню точно, но много раз видел, что EF разбивает условие на два большие фактически идентичные и объединяет их через Union. Ни у кого из вас такого не было ?

Вы предлагаете писать условия по проще, но это означает, что придется написать больше логики на C# с тем чтобы пошагово дозапрашивать необходимые данные. Т.е. обойти сложный запрос сложным алгоритмом кода. Но мне это не нравится. Если взять чистый SQL, то с его помощью я могу создать достаточно эффективный но сложный запрос и он будет вполне читабелен и понимаем при отладке.

Т.е. мы тут имеем выбор:
- пользуйся EF, но делай простые запросы и сложный алгоритм в коде. Фактически вместо eager loading работай с lazy loading реализованным вручную !
- либо не используй EF, и тогда сможешь использовать сколь-угодно сложные и эффективные, читабельные запросы.

Неужели все разработчики EF вынуждены сделать выбор между этими двумя вариантами ? Если нет, то см выше - как вы избегаете сложных запросов.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39748029
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore Неужели все разработчики EF вынуждены сделать выбор Почему обязательно надо делать какой-то выбор? Хочешь написать сложный SQL-запрос - напиши (напрямую, через представление, через табличную функцию, через процедуру) и используй параллельно с обычной работой с entity
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39748034
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

С этим пожалуй могу согласится. Читал в MSDN magazine про какой-то Query Types, который добавили в EF 2.1.
https://msdn.microsoft.com/magazine/mt847184

Сильно не вникал, ибо не практикую EF, но как понял добавлена возможность работать "не с сущностями" получая их из чистого SQL:
Код: c#
1.
context.Authors.FromSql("select authorid,authorname from authors").ToList();



Однако это дна из недавно добавленных фич. Возникает вопрос, как до этого жить и жили программисты ?

Вот вы мне опять предлагаете какие-то обходные пути, чтобы избежать сложного запроса. А я выше как раз и задал вопрос - это что базовое правило ? EF только если нужно получить "документ по ID ну и, может быть, его создателя. Максимум !" ? А если нужно поработать с зависимыми сущностями, то пожалуйста делай 5 вложенных foreach'ей и пиши кучу логику.


Я сталкивался с такими сложными запросами, просто потому, что логика того требовала. Как его избегаете Вы ? А если не избегаете, значит видели эти сложные вложенные запросы с кучей unio'ов, то как вы с этим работали, отлаживали ? Об этом и топик.
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39748036
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreТакже я не помню точно, но много раз видел, что EF разбивает условие на два большие фактически идентичные и объединяет их через Union. Ни у кого из вас такого не было ?примеры будут или опять воду в ступе?

WaspNewCoreЯ думал все с этим сталкивались, а те кто используют EF и вовсе видят это постоянно, так, что думал не понадобятся живые примеры. Нужно будет не забыть поднят эту тему когда снова буду работать с EF.
Где примеры?
...
Рейтинг: 0 / 0
Тема для анонимной психологической помощи пользующемся EF программистам.
    #39748041
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Выше я написал, что у меня нет примеров. Не практикую EF давно, избегаю в проектах.
Но у меня и вопрос к пользователям EF - они что, не видели такого ? Я один это видел ? А весь остальной мир живет в счастливом мире читабельных EF запросов. Я надеялся, что у тех кто практикует EF эти примеры есть прямо сейчас в самых разных вариантах.
И у меня вопрос, как же другие избегают этих запросов ? Как я и написал - через вложенные foreach'и где логика реализуется уже на C# ?
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Тема для анонимной психологической помощи пользующемся EF программистам.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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