ExecuteSprocAccessor не работает для операций CUD? - PullRequest
0 голосов
/ 13 сентября 2010

У меня есть несколько хранимых процедур в моей базе данных.Например, удалить хранимую процедуру, например:

alter procedure [dbo].[DeleteFactor]
@Id uniqueidentifier
as
begin
    delete from Factors where Id = @Id
end

Когда я вызываю это из кода, подобного следующему:

dc.ExecuteSprocAccessor("DeleteFactor", id);

, тогда строка не удаляется.Однако этот код функционирует:

dc.ExecuteNonQuery("DeleteFactor", id);

id является переданным параметром и имеет тип Guid.

Может кто-нибудь объяснить, почему второй работает, а первый - нет?Я нахожу это довольно странным, поскольку первый метод явно должен использоваться с хранимыми процедурами.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

Просто позвоните ToArray или ToList на результат вашего ExecuteSprocAccessor, чтобы заставить его выполнить.

0 голосов
/ 14 сентября 2010

Согласно Извлечение данных в виде объектов , метод ExecuteSprocAccessor использует отложенное выполнение (ala LINQ). Итак, при первом подходе, поскольку вы не обращаетесь к результатам хранимой процедуры DeleteFactor, вызов SQL не выполняется.

В любом случае, я бы использовал второй метод, поскольку вы действительно выполняете не-запрос. Кроме того, первый подход может привести к некоторой путанице, поскольку ExecuteSprocAccessor предназначен для извлечения данных. например «Должны ли данные быть возвращены сюда? Может быть, что-то упущено?»

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