1

我在应用程序中使用实体框架 4.1。其中一项要求是在数据库上执行一些存储过程,其中一些需要相当长的时间。此外,这些存储过程不会返回任何结果,因此我只需要启动它们并忘记它们。

自然,.NET 将等待这些操作完成,因此在一段时间后它会引发“超时期限已过”的异常。

我知道我可以通过将 CommandTimeout 属性设置为更高的值来解决这个问题,但是我正在寻找一种替代解决方案(如果这样的话)。

是否可以使用 Entity Framework 作为 Fire-and-Forget 来执行存储过程?

任何帮助将不胜感激。

问候

4

1 回答 1

1

存储过程不支持触发并忘记执行。您可以使用普通的 ADO.NET 并在单独的连接上异步执行查询(使用BeginExecuteNonQuery)。EF 不支持异步执行。另一种更复杂的行为方式就像一劳永逸的方式是通过单步执行您的存储过程来创建 SQL 作业。而不是调用您的存储过程,您将调用sp_start_job它在启动作业后立即返回,并且作业将异步执行而不会将任何其他结果返回给您的应用程序。

于 2011-07-15T06:37:20.467 回答