我在一个应用程序中使用了实体框架4.1。其中一个需求是在数据库上执行一些存储过程,其中一些存储过程需要相当长的时间。此外,这些存储过程不会返回任何结果,因此我只需要启动它们并忘记它们。
当然,.NET会等待这些操作完成,因此在一段时间后,它会抛出一个异常,即“超时期限已过期”。
我知道我可以通过将CommandTimeout属性设置为更高的值来解决这个问题,但是我正在寻找替代解决方案(如果存在的话)。
是否可以使用实体框架作为Fire-and-Forget执行存储过程?
任何帮助都将不胜感激。
问候
发布于 2011-07-15 14:37:20
存储过程不支持触发和忘记执行。您可以使用普通的ADO.NET并在单独的连接上异步执行查询(使用BeginExecuteNonQuery)。EF不支持异步执行。另一种更复杂的方式是创建SQL Job,单步执行您的存储过程。您不会调用存储过程,而是调用sp_start_job,它在启动作业后立即返回,作业将异步执行,而不会向应用程序返回任何其他结果。
https://stackoverflow.com/questions/6694884
复制相似问题