Я использовал структуру сущности в нескольких проектах. В каждом проекте я использовал хранимые процедуры, сопоставленные с объектами, из-за известных преимуществ хранимых процедур - безопасности, ремонтопригодности и т.д. Однако 99% хранимых процедур являются основными хранимыми процедурами CRUD. Похоже, что это отрицает одну из основных функций экономии времени в Entity Framework - генерации SQL.
Я прочитал некоторые аргументы в отношении хранимых процедур или сгенерированного SQL из Entity Framework. Хотя использование CRUD SP лучше для безопасности, а SQL, сгенерированный EF, часто более сложный, чем необходимо, действительно ли он покупает что-либо с точки зрения производительности или удобства использования SP?
Вот что я считаю:
- В большинстве случаев, изменение SP требует обновления модели данных так или иначе. Таким образом, он не покупает много с точки зрения ремонтопригодности.
- Для веб-приложений подключение к базе данных использует один идентификатор пользователя, специфичный для приложения. Таким образом, пользователи даже не имеют прямого доступа к базе данных. Это снижает безопасность.
- Для небольшого приложения несколько снизилась производительность при использовании сгенерированный SQL, вероятно, не будет большой проблемой. Для высоких объем, производительность критически важных приложений, EF даже быть мудрым выбор? Кроме того, выступили инструкции insert/update/delete EF действительно так плохо?
- Отправка каждого атрибута в хранимую процедуру имеет свои собственные штрафы за производительность, тогда как код сгенерированный EF отправляет только те атрибуты, которые были фактически изменены. При обновлении больших таблиц увеличенный сетевой трафик и накладные расходы на обновление всех атрибутов, вероятно, отрицают преимущества производительности хранимых процедур.
С учетом сказанного, мои конкретные вопросы:
Правильно ли верны мои убеждения? Является ли идея всегда использовать SPs что-то, что является "старой школой", когда ORM набирают популярность? В своем опыте, который лучше всего подходит для EF-сопоставления SP для всех вложений/обновлений/удалений или с использованием EF-генерируемых SQL-операций для CRUD и только с использованием SP для более сложных материалов?