.net 6.0 EF 和长时间运行的进程

.net 6.0 EF and a long running process

提问人:Stephen Cossgrove 提问时间:11/8/2023 最后编辑:marc_sStephen Cossgrove 更新时间:11/8/2023 访问量:47

问:

我有一个使用 EF 与 SQL Server 交互的 ASP.NET Core 6.0 Web API。

我有一个存储过程,负责重建投影表,运行大约需要 10 分钟。

我需要通过 Web API 公开这些保护表的重建,该 API 将此数据公开给我们公司内部的其他应用程序。

谁能告诉我通过存储过程触发重建的最佳方式,但不需要等待调用结束?

提前致谢。

. 实体框架 asp.net-core-webapi .net-6.0

评论

0赞 SpicyCatGames 11/8/2023
您可以调用 ExecuteQueryAsync();或者其他什么,而不是等待任务让它开火并忘记。
0赞 Svyatoslav Danyliv 11/8/2023
这回答了你的问题吗?在后台运行存储过程 ASP.NET 而 C# 页面转到其他页面
0赞 Panagiotis Kanavos 11/8/2023
EF 是 ORM,而不是数据库连接。维护存储过程中没有要映射的对象。请直接使用 ADO.NET。您可能还想使用 BackgroundService,因为 ASP.NET Core 请求的生存期很短

答:

0赞 sich 11/8/2023 #1

据我正确理解,客户端调用您的 API,而 API 又调用运行大约 10 分钟的 sproc。我假设您不需要(通过 API)监控进度或完成情况。因此,若要在后台运行该 sproc,可以使用 .Net Core 辅助角色服务作为 Web 应用的一部分或作为 WebJob(如果在 Azure 中托管)。需要在 Web 应用和后台服务之间使用某种队列或其他通信方法(即使它在同一进程中运行)。一种完全不同的方法是将 Azure Functions 与 Durable Tasks 结合使用(因为 AF 不支持长时间运行的操作)。它们可以由 HTTP 请求触发,因此可以映射到 Web API 图面。

但是,实际上,更简单的方法是使用SQL Server Agent(或者类似,如果您使用其他RDBMS),就像注释中引用的答案所建议的那样。