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配置的问题.
我有一个类似的问题,我发现问题是我错过了我的方法前面的 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()
| 归档时间: |
|
| 查看次数: |
3907 次 |
| 最近记录: |