По согласованию с @Wouter de Kort ...
Более того, когда вам нужно перейти к процедурам, вы можете использовать EF вместе с процедурами, чтобы облегчить переход с одной на другую.
Переход к процедурам будет быстрее в типичном приложении, если вы объедините функциональность в хорошо разработанные процедуры. Т.е. получить как можно больше работы за один вызов sproc. Например, в приложении MVC корзины покупок, когда пользователь нажимает кнопку извлечения, вы можете использовать ORM для чего-то вроде:
- поиск аутентификации пользователя (логин все еще действителен?)
- поиск разрешений (могут ли они покупать указанные предметы? Есть ли особые требования?)
- поиск количества на складе, чтобы убедиться, что они не были исчерпаны в процессе
- запись в БД для резервирования (удаления из имеющихся запасов) предметов до оплаты
- посмотреть информацию об оплате
- регистрация ...?
Или это могут быть совершенно разные шаги, но в любом случае, суть в том, что приложение MVC будет использовать ORM для нескольких вызовов БД для перехода к следующему шагу.
Если вся эта логика заключена в одном хорошо написанном sproc, то есть только один вызов sproc, и все готово. При маршруте MVC-ORM данные должны быть скопированы из БД в драйвер и доставлены в ORM (обычно через сеть на другой хост), а затем прочитаны приложением MVC, чтобы принять простое решение, затем повторяться до завершения всех шагов , В случае использования sproc, который инкапсулирует этот этап извлечения, будет гораздо меньше копирования и перемещения данных, меньше сетевого ввода-вывода, меньше переключения контекста и т. Д.
Подумайте о решении MVC-ORM таким образом. Человек «А» осведомлен только о фактах, а человек «Б» обладает достаточным умом принимать решения с учетом фактов, которые он не представляет. Персона "B" отправляет электронное письмо "A" для фактов. Исходя из ответа «А», «Б» может потребовать еще несколько фактов, прежде чем принимать решение. Это много сообщений туда и обратно.
Если у вас есть один человек, обладающий всеми фактами и знаниями для принятия решений, вам просто нужно задать один вопрос, и его мозг обработает все внутри, чтобы найти ответ. Никаких обсуждений с другим человеком не происходит. Естественно, это будет быстрее.
Это не значит, что обязательно лучше . Отделение фактов от решения означает, что эти компоненты можно заменять / тестировать отдельно, однако, если вы состоите в браке с вашим MVC и вашей БД, это «не проблема».
С другой стороны, многие поклонники MVC ненавидят написание SQL, поэтому считают, что любое логическое решение в SQL является естественной катастрофой. Для таких людей обязательно иметь любую логику, написанную на том же языке , который MVC использует , потому что это ускоряет разработку для них. В некоторых случаях это также «не проблема», поскольку в случае некоторых RDMBS вы можете писать sprocs на том же языке, что и язык, используемый MVC (примеры: .Net - sprocs SQL Server могут быть написаны на C # и использовать .Net; Функции Postgresql (без sprocs) могут быть написаны на Perl, Python, PHP и др. Преимуществом в этом случае является то, что вы можете иметь быстрые sprocs, которые инкапсулируют несколько шагов за один вызов, и вы можете использовать язык программирования, который вы уже быстро в кодировании.