ExecuteSprocAccessor不能用于CUD操作吗?

时间:2010-09-13 16:24:00

标签: enterprise-library

我的数据库中有几个存储过程。例如,删除存储过程,如:

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 :(得分:0)

根据Retrieving Data as ObjectsExecuteSprocAccessor方法使用延迟执行(ala LINQ)。因此,在第一种方法中,由于您没有访问DeleteFactor存储过程的结果,因此不会进行SQL调用。

我会使用第二种方法,因为你真的在执行非查询。此外,第一种方法可能会导致一些混淆,因为ExecuteSprocAccessor旨在检索数据。例如“数据应该在这里返回吗?也许错过了什么?”

答案 1 :(得分:0)

只需在ToArray的结果上致电ToListExecuteSprocAccessor即可让其执行。