实体框架如何知道更新/插入/删除是否影响了任何行?

时间:2011-11-28 19:12:57

标签: sql-server-2008 entity-framework-4

我已将插入/更新/删除功能映射到实体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
...

我假设返回给调用者的信息没有指定行是否受INSERTUPDATEDELETE语句的影响?即使 USP 插入一行而不是更新一行(使用EmployeeID=100),EF是否认为更新成功的原因是什么?

c)但是,即使 USP 没有执行任何INSERT/UPDATE/DELETE语句,为什么EF会认为更新成功?如上面的问题所述,返回给调用者的信息不会指定是否有任何行受INSERT/UPDATE/DELETE的影响?如果是,那么EF在调用以下 USP 时会抛出异常,但事实并非如此。为什么呢?

CREATE PROCEDURE UpdateEmployee
...
AS

/*no statements*/

谢谢

0 个答案:

没有答案