我有一个使用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));
我的理解是上面的DbContext的默认生命周期是Transient(每个Web请求)。
与ASP.Net Identity共享相同的DBContext是否可以,或者我应该为我的应用程序的实体分别使用一个DBContext,指向相同的数据库?
我不知道这是EF Core,ASP.Net Core还是SQL Azure配置的问题。
答案 0 :(得分:1)
我有一个类似的问题,我发现问题是我错过了方法前的await语句。
FetchStuffFromDBAsync();
蜜饯:
await FetchStuffFromDBAsync();
问题消失了。
答案 1 :(得分:1)
MultipleActiveResultSets =确实需要添加连接字符串。
string connectionString =“数据源= MSSQL1;初始目录= AdventureWorks;集成安全性= SSPI; MultipleActiveResultSets = True”;
答案 2 :(得分:1)
多个活动结果集(MARS)是可与SQL一起使用的功能 服务器允许一次执行多个批处理 连接。启用MARS与SQL Server一起使用时,每个命令 使用的对象将会话添加到连接中。
默认情况下,MARS功能处于禁用状态。
您可以按如下所示启用它。
string connectionString = "Data Source=MSSQL1;" +
"Initial Catalog=AdventureWorks;Integrated Security=SSPI;" +
"MultipleActiveResultSets=True";
答案 3 :(得分:0)
我也一直遇到这个问题,在连接字符串中设置MultipleActiveResultSet=True
没有做太多。
Startup.cs
中的我的数据库配置与您的配置非常相似:
services.AddEntityFrameworkSqlServer()
.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
builder => builder.MigrationsAssembly("MyProject")),
ServiceLifetime.Transient
);
原来我得到了
该连接不支持MultipleActiveResultSets
因为我有几个异步数据库查询访问相同的实体。因此,一个db查询将检索一个实体,第二个将通过EF Core的新Include
方法包含相同的实体。另请参阅https://stackoverflow.com/a/46164203/4336725
我有几个异步数据库查询的原因是因为EF Core目前不支持延迟加载(与EF 6不同)。 https://github.com/aspnet/EntityFrameworkCore/issues/3797
我的解决方法是使用不同的显式IQueryable
和Include()
定义多个ThenInclude()
。
答案 4 :(得分:0)
从连接字符串中删除“连接超时”设置。