Используя Entity Framework 6.3, я пытаюсь выполнить хранимую процедуру, которая возвращает набор данных (в результате оператора select
в процедуре, которая объединяет несколько таблиц). Хранимая процедура существует, и я могу выполнить ее через SSMS, используя те же учетные данные, просто чтобы исключить очевидные предложения.
Вызов хранимой процедуры выглядит следующим образом:
using Microsoft.Data.SqlClient; //!
var timestamp = new DateTime.UtcNow();
var scheduleNo = "123";
var machine = "3";
var result = await DbContext.Database.SqlQuery<ScheduleData>(
"exec GetScheduleData @UpdateTimeStamp, @ScheduleNo, @Machine",
new SqlParameter("@UpdateTimeStamp", timestamp),
new SqlParameter("@ScheduleNo", scheduleNo),
new SqlParameter("@Machine", machine))
.ToListAsync();
Выполнение завершается с ошибкой:
SqlParameterCollection принимает только ненулевой SqlParameter введите объекты, а не объекты SqlParameter.
Я искал эту точную ошибку, нашел похожий вопрос здесь , но я не думаю, что он применим, так как оригинальный постер этого не делает даже используйте EF.
Ответ на этот вопрос не представляется применимым, так как я уже использую Microsoft.Data.SqlClient
(как подчеркнуто в листинге выше).
В DbContext
не определено DbSet
, которое соответствовало бы результирующему набору, возвращаемому из процедуры, поэтому я не могу использовать DBSet<ScheduleData>.FromSql
или .FromSqlRaw
.
FWIW, мне нужно, чтобы набор результатов был доступен только для чтения, поэтому не нужно отслеживать изменения EF и т. Д. c.
Есть ли способ сделать это без полного обхода EF и создать отдельное соединение с БД?