Как бы вы использовали EF в типичных бизнес-уровнях / уровне доступа к данным / хранимых процедурах? - PullRequest
3 голосов
/ 06 декабря 2010

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

По моему опыту, это не очень хорошая практика, поэтому я предполагаю, что мое понимание Entity Framework неверно.

Аналогично, демонстрационные версии WCF RIA Services используют EF, и демонстрационные версии всегда одинаковы. Может ли кто-нибудь пролить свет на то, как вы будете использовать EF в типичной настройке бизнес-уровня / уровня доступа к данным / хранимых процедур.

Я думаю, что я сбит с толку и не должен быть !!?

Ответы [ 5 ]

6 голосов
/ 06 декабря 2010

Нет ничего плохого в выполнении SQL с клиента.Большинство (если не все) проблем, которые это может вызвать, на самом деле отсутствуют при использовании чего-то вроде EF.Например:

  1. Сгенерированный клиентом SQL может вызвать ошибки синтаксиса во время выполнения.Это не исключено, поскольку описание вашего запроса в основном проверяется во время компиляции (при условии, что сам генератор не генерирует недопустимый SQL, что также маловероятно)
  2. Сгенерированный клиентом SQL может быть неэффективным.Это не так с современным программным обеспечением баз данных, которое имеет кеш запросов.EF работает таким образом, который совместим с кешами запросов, то есть он последовательно генерирует один и тот же SQL (при условии, что вы используете один и тот же код) и использует параметры для изменяющихся данных.
  3. Сгенерированный клиентом SQL может быть небезопасным (SQLуколы и еще много чего).Все это обрабатывается генератором, который использует параметры для ваших значений и не интерполирует пользовательский ввод в сам запрос.
4 голосов
/ 06 декабря 2010

В прежние времена Клиент / Сервер считалось хорошей практикой делать все обновления БД с использованием хранимых процедур.

Но теперь вполне допустимо, чтобы O / RM генерировал SQL и работал непосредственно с БД.

1 голос
/ 06 декабря 2010

Легенда гласит, что Скотт Хансельман однажды сказал: "Это не настоящая демонстрация, если кто-то не перетаскивает сетку данных" (стр. 478 Silverlight 4 в действии, Пит Браун)

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

Что касается вашего комментария о хранимых процедурах и различных ответов на ваш вопрос о генераторе. Генератор хорош и поправляется. Однако существуют определенные обстоятельства, когда он будет генерировать совершенно непригодные для использования запросы. (см. мой SO вопрос здесь и , обсуждаемый в блоге команды ADO.NET )

Таким образом, бывают случаи, когда ручные запросы являются вашим единственным выходом (либо с помощью хранимых процедур, функций табличных значений, представлений и т. Д.)

1 голос
/ 06 декабря 2010

Что ж, отчасти причина того, что выполнение sql в хранимых процедурах является хорошей идеей, заключается в том, что она дает вам уровень абстракции - когда неизбежно происходят изменения в db, вы вносите изменения в одном месте (proc), а не вдесяток мест (все места, где вы звонили клиенту sql).Entity Framework обеспечивает этот уровень абстракции через модель данных, и у вас есть то же преимущество.

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

1 голос
/ 06 декабря 2010

никогда не показывает использование хранимых процедур

Посмотрите это видео: Использование собственных хранимых процедур для вставки, обновления и удаления объектов в Entity Framework.

Обратите внимание, что на эту тему есть много других видео, которые, безусловно, стоит посмотреть!

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