Ответ 1
MVC в этом случае абсолютно не связан. То, как вы называете хранимую процедуру из EF, будет тем же. Я предполагаю, что вы хотите использовать хранимые процедуры без фактического использования сущностей и linq-to-entity (основные функции EF), не так ли? Обычно вам нужно:
- Файл EDMX (модель данных сущностей ado.net), в котором вы запускаете обновление из базы данных и добавляете все хранимые процедуры, которые хотите использовать. EDMX файл также генерирует производные
ObjectContext
и все сущности по умолчанию. - Затем вы должны перейти в Model Browser и создать импорт функций для каждой процедуры. Импорт функции будет создавать метод для производного
ObjectContext
, который позволит вам вызвать хранимую процедуру как любой другой метод .net. - Во время импорта функции вам придется создавать сложный тип (это может произойти автоматически) для набора результатов, возвращаемого из хранимой процедуры.
Вам также не нужно вообще использовать импорт функций и вы можете выполнять процедуры напрямую, вызывая либо:
-
objectContext.ExecuteSqlCommand("storedProcedureName", SqlParameters)
для SP, не возвращающих набор записей -
objectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)
для SPs, возвращающих набор записей.ResultType
должен иметь свойства с теми же именами, что и столбцы в наборе результатов. Он может работать только с плоскими типами (без вложенных объектов).
При использовании хранимых процедур существуют некоторые ограничения:
- Фреймворк Entity не любит хранимые процедуры, которые возвращают динамические результирующие множества (на основе некоторого набора результатов условия имеют разные столбцы)
- Структура Entity не поддерживает хранимые процедуры, возвращающие несколько наборов результатов - есть EFExtensions, но это больше похоже на выполнение ADO.NET напрямую.