我编写的大多数应用程序都不使用MultipleActiveResultSets=True
,但我已经看到在其中几个和一些教程中启用了该选项。
这个SO question涉及相同的主题,但它已经很老了,我相信同时情况发生了很大变化。
OP 争论执行一些非查询,同时执行ExecuteReader
. 在这种情况下,我认为这是一个糟糕的设计,因为它可能会被一些批处理式操作所取代,也许是一个存储过程,以最大限度地减少往返次数。
当将 Entity Framework 与 ASP.NET Core 一起使用并接收到与数据上下文相关的异常时,我将其视为一个错误,而不是考虑启用 MARS。
阅读这篇MS Docs 文章,我发现在启用 MARS 时应该注意各个方面,例如选项(ANSI_NULLS
、DATE_FORMAT
、LANGUAGE
、TEXTSIZE
)、安全上下文、当前数据库、状态变量(@@ERROR
、@@ROWCOUNT
、@@FETCH_STATUS
、 )。@@IDENTITY
此外,10 年以上意味着功能更强大的服务器能够在真正需要时保持更多连接(缓存应该有助于减少这种需求)。
所以我想知道在使用现代 ASP.NET Core 应用程序(3.0+)时是否必须考虑启用 MARS。
问题:在使用 ASP.NET Core 3.0 和 SQL Server 2019+ 时,我应该何时使用 MultipleActiveResultSets=True?
编辑以解决反馈
我对详尽的分析不感兴趣,但有几个适当的上下文来证明使用 MARS 是否合理。
ASP.NET Core 应用程序中的一个典型示例是将数据库上下文设置为范围(每个请求从连接池获取数据库连接,进行更改,通常每个请求/范围一个事务)。到目前为止,我已将与每个连接的多个查询相关的错误视为我自己的错误以避免 MARS,但我这样做并没有真正理解原因。