Использование DbContext.Database.SqlQuery с хранимыми процедурами
Быстрый ответ
Перейдем сразу к практике. Пример вызова хранимой процедуры с помощью DbContext.Database.SqlQuery<T> в Entity Framework:
var results = context.Database.SqlQuery<YourType>("EXEC StoredProcedureName @p1, @p2", 
             new SqlParameter("p1", value1), 
             new SqlParameter("p2", value2)).ToList();
Важные моменты:
- Тип 
YourTypeдолжен совпадать с типом возвращаемых данных. - Замените 
StoredProcedureName,@p1,@p2на имя и параметры вашей хранимой процедуры. - Для связывания параметров со значениями используйте экземпляры 
SqlParameter. 
Совет: Строение и названия параметров в вашей хранимой процедуре и в вызове должны быть идентичными. Это обеспечит релевантность результатов.

Шаг за шагом при работе с комплексными типами
Требуется обойти преграду при работе с комплексными типами? Не беда:
- Создайте класс, структура которого соответствует результатам хранимой процедуры:
 
public class MyComplexType
{
    // Введите свойства, соответствующие схеме хранимой процедуры
}
- Вызовите хранимую процедуру аналогичным способом:
 
var complexResults = context.Database.SqlQuery<MyComplexType>("EXEC MyComplexStoredProcedure @p1, @p2", new SqlParameter("@p1", value1), new SqlParameter("@p2", value2)).ToList();
Совет: Состыковка имен свойств вашего класса и названий столбцов возвращаемых процедурой значений упростит маппинг данных.
Ловкое обработка исключений
Ошибки случаются у каждого. Разумное обращение с SqlException поможет справиться с неожиданными ситуациями:
try
{
    var results = context.Database.SqlQuery<YourType>("EXEC mySpName @param1, @param2", new SqlParameter("param1", value1), new SqlParameter("param2", value2)).ToList();
    // Сюда вставьте код без риска
}
catch (SqlException ex)
{
    // Место для обработки SQL-ошибок
}
Лучшие практики: Дисциплина и аккуратность
Серьезное отношение к коду помогает быть эффективным. Используйте using для грамотного управления сущностями:
- Рекоммендуется использовать блок 
usingдля корректного управления жизненным цикломDbContext. - Если параметров много, не смешивайте их прямо в вызове 
SqlQuery. 
object[] params = {/* Ваши экземпляры SqlParameter здесь */}
var results = dbContext.Database.SqlQuery<YourType>("EXEC MyStoredProcedure @p1, @p2", params).ToList();
Визуализация – откройте магию работы
Представим, что такое работа метода DbContext.Database.SqlQuery<TElement>(sql, params) с хранимыми процедурами:
🗝️ Метод 'SqlQuery<TElement>' — главный дирижер в оркестре данных!
📦 В каждом «ящике» с данными — ценность, готовая превратиться в `TElement`.
🔓 Поверните ключ и, вот оно, данные в ваших руках!
Если актуален SQL Server 2005, немного иначе устройте команду:
// Небольшой комментарий для поднятия настроения
var results = context.Database.SqlQuery<YourType>("EXEC mySpName @param1 = {0}, @param2 = {1}", new object[] { value1, value2 }).ToList();
Помните: порядок следования, типы и синтаксис SQL — это обеспечивает вас итоговым надежным методом SqlQuery, избавляющим от нежданных SqlException.
Чистота – залог успеха
Чистота и читаемость кода — важны для команды разработчиков:
- Для работы с комплексными типами создавайте отдельный класс.
 - Каждому 
SqlParameterдайте точное обозначение для правильной интерпретации. 
Не избитый путь: работа с динамическими типами
Иногда, когда требуется работа с динамическими типами, нужно воспользоваться динамической версией SqlQuery и использовать DbDataReader:
// Это способ для смельчаков
var results = context.Database.SqlQuery(typeof(YourType), "EXEC StoredProcedureName", parameters).GetEnumerator();
while (results.MoveNext())
{
    var record = (YourType)results.Current;
    // Место для обработки данных
}
Полезные материалы
- Raw SQL Queries – EF6 | Microsoft Learn — Руководство по работе с 'сырыми' SQL-запросами в EF 6.
 - Working with Stored Procedure in Entity Framework Core — Использование хранимых процедур в EF Core.
 - Executing Raw SQL Queries using Entity Framework Core — Выполнение 'сырых' SQL-запросов с использованием EF Core.
 - ASP.NET MVC – Attaching an entity of type 'MODELNAME' failed... – Stack Overflow — Обсуждение ошибок EF и хранимых процедур на Stack Overflow.
 - CodeProject – CodeProject — на CodeProject вы можете найти полезные решения для многих проблем, не только связанных с хранимыми процедурами.