我有一个使用EF的ASP.Net核心应用程序。
我使用ASP.Net标识,并为应用程序的实体共享相同的DBContext。
我已经将连接字符串设置为有MultipleActiveResultSet=True的Azure数据库。
它工作了一两天,但最终由于错误而失败了:
该连接不支持MultipleActiveResultSets。
我不认为火星是真正的问题,因为它起作用了头两天。
我使用ASP.Net核心的内置DI来设置我的DbContext。
services.AddDbContext<AppDbContext>(options =>
  options.UseSqlServer(appDbContextConnectionString));我的理解是,上述DbContext的默认生存期是短暂的(每个web请求)。
是否可以使用相同的DBContext与ASP.Net身份共享,还是应该为我的应用程序的实体提供一个单独的,指向同一个DB的?
我不知道这是EF核心、ASP.Net核心还是SQL配置的问题。
发布于 2018-01-08 10:06:16
我也一直遇到这个问题,并且在连接字符串中设置MultipleActiveResultSet=True没有做什么。
我在Startup.cs中的db配置与您所拥有的非常相似:
 services.AddEntityFrameworkSqlServer()
         .AddDbContext<MyDbContext>(options =>
           options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
            builder => builder.MigrationsAssembly("MyProject")),
            ServiceLifetime.Transient
         );结果是我得到了
该连接不支持MultipleActiveResultSets。
因为我有几个异步db查询访问相同的实体。因此,一个db查询将检索一个实体,另一个查询将通过EF的新Include方法包含相同的实体。还请参见https://stackoverflow.com/a/46164203/4336725
我有几个异步db查询是因为EF目前不支持延迟加载(与EF 6不同)。https://github.com/aspnet/EntityFrameworkCore/issues/3797
我的解决办法是用不同的显式IQueryable和ThenInclude()定义几个ThenInclude()。
https://stackoverflow.com/questions/46033645
复制相似问题