EF Core的间歇性错误:连接不支持MultipleActiveResultSets

Jon*_*gel 16 entity-framework-core azure-sql-database asp.net-core

我有一个使用EF Core的ASP.Net Core应用程序.

我使用ASP.Net Identity并为我的应用程序的实体共享相同的DBContext.

我已将连接字符串设置为Azure SQL数据库,以使MultipleActiveResultSet = True.

它可以工作一两天,但最终失败并出现错误:

该连接不支持MultipleActiveResultSets.

我不认为MARS是真正的问题,因为它在前两天起作用了.

我正在使用ASP.Net Core的内置DI来设置我的DbContext.

services.AddDbContext<AppDbContext>(options =>
  options.UseSqlServer(appDbContextConnectionString));
Run Code Online (Sandbox Code Playgroud)

我的理解是上面的DbContext的默认生命周期是Transient(每个Web请求).

是否可以与ASP.Net Identity共享相同的DBContext,或者我应该为我的应用程序的实体分别使用一个DBContext,指向相同的数据库?

我不知道这是EF Core,ASP.Net Core还是SQL Azure配置的问题.

Mat*_*tBH 9

我有一个类似的问题,我发现问题是我错过了我的方法前面的 await 语句。

FetchStuffFromDBAsync();
Run Code Online (Sandbox Code Playgroud)

变成:

await FetchStuffFromDBAsync();
Run Code Online (Sandbox Code Playgroud)

问题就解决了。


小智 7

MultipleActiveResultSets=True 需要添加连接字符串。

string connectionString = "Data Source=MSSQL1;Initial Catalog=AdventureWorks;Integrated Security=SSPI;MultipleActiveResultSets=True"; 
Run Code Online (Sandbox Code Playgroud)


小智 1

我也一直遇到这个问题,并且MultipleActiveResultSet=True连接字符串中的设置没有多大作用。

我的数据库配置Startup.cs与您的非常相似:

 services.AddEntityFrameworkSqlServer()
         .AddDbContext<MyDbContext>(options =>
           options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
            builder => builder.MigrationsAssembly("MyProject")),
            ServiceLifetime.Transient
         );
Run Code Online (Sandbox Code Playgroud)

事实证明我得到了

连接不支持 MultipleActiveResultSets

因为我有多个异步数据库查询访问相同的实体。因此,一个数据库查询将检索一个实体,第二个数据库查询将通过 EF Core 的新方法包含相同的实体Include。另请参阅/sf/answers/3231494241/

我有几个异步数据库查询的原因是因为 EF Core 目前不支持延迟加载(与 EF 6 不同)。https://github.com/aspnet/EntityFrameworkCore/issues/3797

我的解决方法是使用不同的显式和定义多个IQueryables 。Include()ThenInclude()