Я сопоставил функции вставки / обновления / удаления с сущностью Employee
.Затем я изменил сущность с EmployeeID=100
и назвал SaveChanges
, и, в свою очередь, EF вызвал процедуру обновления хранилища ( USP ) для этой сущности
a)
CREATE PROCEDURE UpdateEmployee
...
AS
UPDATE Employee
SET ...
WHERE EmployeeID=1000 // EF throws an exception, since there aren't any rows with
// EmployeeID=1000 and thus no rows were affected
SELECT ...
Сначала я подумал, что только информация, которую DB вернет обратно вызывающей стороне (вызывающей стороной является EF), является количеством строк, затронутых последним оператором в USP.Таким образом, даже если USP не удалось обновить какие-либо строки, EF все равно будет считать, что обновление прошло успешно, поскольку DB сообщит, что затронута одна строка (из-за оператора SELECT
).Но похоже, что информация, возвращаемая вызывающей стороне, также указывает, были ли затронуты строки оператором SELECT
или оператором INSERT/UPDATE/DELETE
?!Правильно?
b)
CREATE PROCEDURE UpdateEmployee
...
AS
INSERT INTO Employee
...
Я предполагаю, что информация, возвращаемая обратно вызывающей стороне, не указывает, были ли затронуты строки INSERT
или UPDATE
или DELETE
заявление?Это причина, по которой EF считает обновление успешным, даже если USP вставил строку вместо обновления строки (с EmployeeID=100
)?
c) Но почему EF считает обновление успешнымдаже если USP не выполняет INSERT/UPDATE/DELETE
операторов?Как отмечалось в моих предыдущих вопросах, разве информация, возвращаемая обратно вызывающей стороне, не указывает, были ли какие-либо строки затронуты INSERT/UPDATE/DELETE
?Если да, то EF должен вызвать исключение при вызове следующего USP , но это не так.Почему?
CREATE PROCEDURE UpdateEmployee
...
AS
/*no statements*/
Спасибо