Entity SQL или StoredProcedure, что использовать? - PullRequest
2 голосов
/ 24 мая 2011

У меня есть выбор для использования Entity SQL-запроса внутри моего DAL или использования хранимой процедуры на уровне дБ в качестве опции ,

Какой из них я должен использовать. И каковы преимущества / недостатки любого из этих подходов?

Я более склонен к Entity SQL , поскольку я не хочу, чтобы моя логика на уровне db раскрывала мою логику.

Ответы [ 4 ]

1 голос
/ 24 мая 2011

Если вы также являетесь администратором БД, используйте LINQ Entities. Будет проще, если вы сохраните свой код вместе.

Однако, если вы знаете, как обходиться с SQL (или кто-то другой отвечает за производительность SQL Server), используйте хранимые процедуры. Намного проще оптимизировать операции с БД без повторного выпуска приложения.

1 голос
/ 24 мая 2011

Исходя из моего опыта:

Entity Framework:

  • Логика остается в приложении
  • Проще интегрировать с контролем источников (по моему опыту)
  • Может также использовать хранимые процедуры, если это необходимо (я использовал их в процедуре полнотекстового поиска)
  • Независимость от базы данных -> ну, я на самом деле не пробовал менять базы данных раньше, но она должна защищать вас от основного хранилища персистентности
  • Личные предпочтения: гораздо красивее и удобнее получать массив объектов / моделей вместо громоздких данных ... не говоря уже о том, что я нужно знать порядок столбцов и тому подобное ..

База данных SP

  • Вам не нужно изучать что-то новое - есть определенные задачи, которые тривиальны из хранимого процесса, но могут быть настолько раздражающими при использовании EF. Ну, это зависит от того, как быстро вы догоняете.
  • Простой в использовании, более детальный контроль - до сих пор, я не знаю, как создать запрос, который использует WITH и OVER () в linq для сущностей.

Лично я бы пошел с EF по причинам, которые я упомянул выше (плюс несколько других, о которых я не могу думать прямо сейчас). Кроме того, если есть что-то, что я не могу или не могу сделать быстро с помощью запроса linq, я просто создаю сохраненный процесс или просто выполняю инструкцию SQL (да, вы можете выполнить SQL, используя контекст).

0 голосов
/ 24 мая 2011

Я использую StoredProc только в том случае, если:

  1. Для получения некоторых данных вам нужно сделать более 2 запросов к базе данных - зачем отправлять их из скрипта, проще написать процедуру, которая выполнит все действияв дБ и только отправил вам результаты (это слишком намного быстрее)
  2. Если проще написать процедуру и потратить 5 минут, чем гениальные сущности и потратить 1 день
  3. Если некоторые операции по умолчаниюБег быстрее в дБ или не поддерживается сущностями
0 голосов
/ 24 мая 2011

У обоих есть свои плюсы и минусы.

Entity SQL защищен от атак SQL-инъекций, как его всегда параметризуют.
Но если вы достаточно хорошо знаете SQL, вы увидите случаи, когда хранимая процедурабыло бы более разумным.

Знаете ли вы, что вы можете использовать хранимые процедуры в Entity Framework?
Предпочли бы предложить Entity Framework.Используйте хранимые процедуры, когда вы чувствуете, что в определенном сценарии хранимые процедуры более оптимизированы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...