Невозможно запустить хранимую процедуру из Entity Framework Core - PullRequest
1 голос
/ 09 ноября 2019

У меня есть следующий код в EF Core для запуска хранимой процедуры:

TenandId = user.TenantId;
userName = user.UserName;
updateDate = DateTime.Now;
TimeStart = 139601;
TimeEnd = 139612;
RequestId = id;

_context.TempRequest.FromSql("EXEC dbo.AddRequest_To_TempRequest @TimeStart, @TimeEnd, @TenantId, @UpdateDate, @UserName, @RequestId",
                new SqlParameter("@TimeStart", TimeStart),
                new SqlParameter("@TimeEnd", TimeEnd),
                new SqlParameter("@TenantId", TenandId),
                new SqlParameter("@UpdateDate", updateDate),
                new SqlParameter("@UserName", userName),
                new SqlParameter("@RequestId", RequestId));

, но когда я ее запускаю, она не работает, но также не выдает никаких ошибок.

Я делаю какую-то ошибку?

Спасибо

1 Ответ

0 голосов
/ 10 ноября 2019

FromSql используется, когда необработанный SQL представляет запрос . И метод создает запрос LINQ / EF Core, но, как обычно, с IQueryable<> / IEnumerable<> не выполняет его, пока он не будет повторен (с foreach, ToList() и т. Д.) - так называемое отложенное выполнение. Это должно объяснить, почему « не работает, но также не выдает никаких ошибок ».

Для необработанных операторов SQL без запросов EF Core предоставляет другой метод ExecuteSqlCommand (или ExecuteSqlRaw / ExecuteSqlInterpolated в EF Core 3.0+), который выполняется немедленно.

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

_context.TempRequest.FromSql

на

_context.Database.ExecuteSqlCommand

должна сделать эту работу.

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