我已将插入/更新/删除功能映射到实体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
语句的影响?即使 USP 插入一行而不是更新一行(使用EmployeeID=100
),EF是否认为更新成功的原因是什么?
c)但是,即使 USP 没有执行任何INSERT/UPDATE/DELETE
语句,为什么EF会认为更新成功?如上面的问题所述,返回给调用者的信息不会指定是否有任何行受INSERT/UPDATE/DELETE
的影响?如果是,那么EF在调用以下 USP 时会抛出异常,但事实并非如此。为什么呢?
CREATE PROCEDURE UpdateEmployee
...
AS
/*no statements*/
谢谢