Asp.net core EF Core出现间歇性错误:该连接不支持MultipleActiveResultSet

Asp.net core EF Core出现间歇性错误:该连接不支持MultipleActiveResultSet,asp.net-core,entity-framework-core,azure-sql-database,Asp.net Core,Entity Framework Core,Azure Sql Database,我有一个ASP.NETCore应用程序,它使用EFCore 我使用ASP.Net标识并为我的应用程序实体共享相同的DBContext 我已将我与Azure SQL数据库的连接字符串设置为MultipleActiveResultSet=True 它工作了一两天,但最终失败了,出现了以下错误: 该连接不支持MultipleActiveResultSet 我不认为火星是真正的问题,因为它在上升的头两天起作用 我正在使用ASP.NETCore的内置DI设置DbContext services.AddDb

我有一个ASP.NETCore应用程序,它使用EFCore

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

我已将我与Azure SQL数据库的连接字符串设置为MultipleActiveResultSet=True

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

该连接不支持MultipleActiveResultSet

我不认为火星是真正的问题,因为它在上升的头两天起作用

我正在使用ASP.NETCore的内置DI设置DbContext

services.AddDbContext<AppDbContext>(options =>
  options.UseSqlServer(appDbContextConnectionString));
services.AddDbContext(选项=>
使用SQLServer(appDbContextConnectionString));
我的理解是,上面DbContext的默认生存期是暂时的(每个web请求)

是否可以与ASP.Net标识共享同一个DBContext,还是应该为我的应用程序实体指定一个单独的指向同一个DB的DBContext


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

我也一直遇到这个问题,在连接字符串中设置
MultipleActiveResultSet=True
没有什么作用

我在
Startup.cs
中的db配置与您的配置非常相似:

 services.AddEntityFrameworkSqlServer()
         .AddDbContext<MyDbContext>(options =>
           options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
            builder => builder.MigrationsAssembly("MyProject")),
            ServiceLifetime.Transient
         );
services.AddEntityFrameworkSqlServer()
.AddDbContext(选项=>
options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”),
builder=>builder.migrationassembly(“MyProject”),
服务寿命。暂时的
);
结果是我越来越

该连接不支持MultipleActiveResultSet

因为我有几个异步db查询访问相同的实体。因此,一个db查询将检索一个实体,第二个db查询将通过EF Core新的
Include
方法包含相同的实体。也看到

我有几个异步db查询的原因是因为EF Core目前不支持延迟加载(与EF6不同)


我的解决方法是用不同的显式
Include()
thenclude()
定义几个
IQueryable
s

从连接字符串中删除“连接超时”设置。

我遇到了类似的问题,我发现问题在于我错过了方法前面的等待语句

FetchStuffFromDBAsync();
string connectionString = "Data Source=MSSQL1;Initial Catalog=AdventureWorks;Integrated Security=SSPI;MultipleActiveResultSets=True"; 
成为:

await FetchStuffFromDBAsync();

问题消失了。

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

string connectionString = "Data Source=MSSQL1;Initial Catalog=AdventureWorks;Integrated Security=SSPI;MultipleActiveResultSets=True"; 
多个活动结果集(MARS)是SQL的一项功能 允许在单个服务器上执行多个批处理的服务器 连接。当启用MARS与SQL Server一起使用时,每个命令 使用的对象将会话添加到连接

默认情况下禁用火星功能

您可以像下面那样启用它

string connectionString = "Data Source=MSSQL1;" +   
    "Initial Catalog=AdventureWorks;Integrated Security=SSPI;" +  
    "MultipleActiveResultSets=True";  

他所说的“中间件对每个请求都有作用域吗?”是什么意思?您能否共享插入或创建db上下文的代码?您可能需要检查“MultipleActiveResultSet=True”的连接字符串是否在运行时实际使用。只是猜测而已。DbContext不是线程安全的。确保多个线程没有使用同一上下文实例。无论何时调用EF中的
async
方法,在对EF进行任何其他调用之前,都必须等待该调用。您能解释一下原因吗?