Asp.net core EF Core出现间歇性错误:该连接不支持MultipleActiveResultSet
我有一个ASP.NETCore应用程序,它使用EFCore 我使用ASP.Net标识并为我的应用程序实体共享相同的DBContext 我已将我与Azure SQL数据库的连接字符串设置为MultipleActiveResultSet=True 它工作了一两天,但最终失败了,出现了以下错误: 该连接不支持MultipleActiveResultSet 我不认为火星是真正的问题,因为它在上升的头两天起作用 我正在使用ASP.NETCore的内置DI设置DbContextAsp.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
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进行任何其他调用之前,都必须等待该调用。您能解释一下原因吗?