Entity Framework - скрытая угроза

0 0

Заголовок, прям название фильма для Голливудского боевика с элементами моделей Тесла (для тех кто не понял, у тесла есть модели S3XY). 

Я уже говорил, что не люблю Entity Framework. Я знаю его, иногда использую для прототипов, но для реальных больших проектов не стал бы использовать. У меня как-то было видео на эту тему. Да, он может где-то ускорить работу программиста. Да, в SQL легко сделать очепятку. Но в EF можно налажать. 

У меня были случаи, когда Linq к базе данных падал с ошибкой - не могу сгенерировать запрос. 

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

Проблема в коде была в том, что где-то программист вытащил данные из базы (материализовал данные) и после этого использовал эти данные в запросе к базе данных. Как Linq может использовать данные из C# кода в запросе к базе данных? Засунуть их в табличную переменную и использовать:

declare @p1 tabletype

insert into @p1 values(‘sdfdsf’)

insert into @p1 values(‘4567’)

И вот таких вот insert было создано более 6 тысяч штук. У табличной переменно нет индексов и на сколько я помню MS SQL Server по умолчанию идолища сих пор использует для таких переменных LOOP JOIN. То есть при Join на такую таблицу в цикле Loop будет происходить выборка данных. При наличии 6000 записей цикл будет выполняться 6000 раз. 

Вот тут должен быть мем СПАСИБА

Если бы в коде был бы чистый SQL, то на ревью можно было бы тут же дать по рукам, потому что было бы видно, что кто-то загружает в табличную переменную данные. 

В случае с EF и особенно при IQueryable, проследить откуда идут данные и как они используются - для фильтрации на БД или сервере приложений может быть проблематичным. EF может быть скрытой угрозой, потому что программисты не смотрят (могут видеть, но из моего опыта не смотрят) на сгенерированные запросы и в них может быть что угодно. 


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым

Комментарии

Паника, что-то случилось!!! Ничего не найдено в комментариях. Срочно нужно что-то добавить, чтобы это место не оставалось пустым.

Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне